You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复失效的Cocktail Sort(鸡尾酒排序)代码使其正常运行?

修复Cocktail Sort排序算法并完善功能

原代码中的Cocktail Sort无法正常工作,同时缺少触发按钮和交换次数统计,以下是修复后的完整代码及关键修改点:

关键修复点

  • 修正反向遍历交换逻辑:原反向循环中错误交换了numbers[j]与numbers[j+1],实际应交换numbers[j-1]与numbers[j]
  • 添加交换次数统计:每次执行交换操作时,对swaps变量进行累加
  • 新增触发按钮:在setup函数中创建Cocktail Sort的触发按钮,绑定对应的排序函数
  • 补充结果输出:排序完成后在控制台输出耗时和交换次数

修复后的完整代码

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("Selection Sort");
  button2.mousePressed(selectionSort);
  button3 = createButton("Insertion Sort");
  button3.mousePressed(insertionSort);
  button4 = createButton("Javascript Built-in Sort");
  button4.mousePressed(bSort);
  // 新增Cocktail Sort按钮
  button5 = createButton("Cocktail Sort");
  button5.mousePressed(cocktailSort);
}
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;
              swaps += 1; // 统计交换次数
              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-1];
              numbers[j-1] = numbers[j];
              numbers[j] = tmp;
              swaps += 1; // 统计交换次数
              sorted = false;
          }
      }
  }
  t2 = millis();
  console.log(t2-t1);
  console.log("swaps :", swaps); // 输出交换次数
}


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

内容的提问来源于stack exchange,提问作者user21097900

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:40:32