How do I fix this cocktail shaker sort code to work?

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++;
  }
  
  
  
 }'