I’m trying to write a code that sorts random numbers with different sorting alrorithms. I have 5 algorithms so far, including bubble sort, javascript built in sort, insertion sort, selection sort, and cocktail sort. I am also writing how many swaps and how much time each sort takes. Other sorts are working just fine( I think), but it seems like cocktail sort is not working.
I tried to modify that part of the code, but none of them worked. Here is the code below. I want it to work properly while displays how many swaps and how much time it took at the console. Thank you.
'NUM_ELEMENTS = 500;
numbers = [];
function setup() {
createCanvas(400, 300);
for(i=0;i<=NUM_ELEMENTS;i++) {
numbers.push(round(random(1,NUM_ELEMENTS)));
}
para1 = createElement("p","");
tempString = "";
for(i=0;i<=NUM_ELEMENTS;i++) {
console.log(numbers[i]);
tempString = tempString + numbers[i] + ",";
}
para1.html(tempString);
button1 = createButton("Bubble Sort");
button1.mousePressed(bubbleSort);
button2 = createButton("Seclection Sort");
button2.mousePressed(selectionSort);
button3 = createButton("Insertion Sort");
button3.mousePressed(insertionSort);
button4 = createButton("Javascript Bulit-in Sort");
button4.mousePressed(bSort);
}
function bubbleSort() {
total = 0
swaps = 0
t1 = millis();
console.log("sorting")
let n = numbers.length;
for(let i = 0; i < n; i++) {
for(let j = 0; j < n; j++) {
if(numbers[j] > numbers[j+1]){
let t = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = t;
swaps = swaps + 1;
}
}
}
t2 = millis();
console.log(t2-t1);
console.log("swaps :",swaps);
}
function selectionSort() {
let n = numbers.length;
console.log("Sorting...")
total = 0
t1 = millis();
swaps = 0
for(let i = 0; i < n; i++) {
let min = i;
for(let j = i+1; j < n; j++){
if(numbers[j] < numbers[min]) {
min=j;
swaps = swaps + 1;
}
}
if (min != i) {
let tmp = numbers[i];
numbers[i] = numbers[min];
numbers[min] = tmp;
swaps = swaps + 1;
}
}
t2 = millis();
console.log(t2-t1);
console.log("swaps :", swaps);
}
function insertionSort() {
console.log("sorting");
t1 = millis();
swaps = 0;
total = 0
let n = numbers.length;
for (let i = 1; i < n; i++) {
let current = numbers[i];
let j = i-1;
while ((j > -1) && (current < numbers[j])) {
numbers[j+1] = numbers[j];
swaps = swaps + 1;
j--;
}
numbers[j+1] = current;
}
t2 = millis();
console.log(t2-t1);
console.log("swaps : ", swaps);
}
function bSort() {
console.log("Sorting...")
total = 0
t1 = millis();
sort(numbers);
t2 = millis();
console.log(t2-t1);
console.log("swaps : unknown");
}
function cocktailSort() {
console.log("sorting...")
total = 0
swaps = 0
t1 = millis();
let n = numbers.length;
let sorted = false;
while (!sorted) {
sorted = true;
for (let i = 0; i < n - 1; i++) {
if (numbers[i] > numbers[i + 1]){
let tmp = numbers[i];
numbers[i] = numbers[i + 1];
numbers[i+1] = tmp;
sorted = false;
}
}
if (sorted)
break;
sorted = true;
for (let j = n - 1; j > 0; j--) {
if (numbers[j-1] > numbers[j]) {
let tmp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j+1] = tmp;
sorted = false;
}
}
}
t2 = millis();
console.log(t2-t1);
}
function draw() {
background(220);
textSize(13);
column = 10;
row = 0;
for (i=0;i<NUM_ELEMENTS;i++) {
if (i%18==0) {
column = column + 18;
row = 0;
}
text(numbers[i],column,row*15+15);
row++;
}
}'