将VisuAlgo气泡排序代码转换为Javascript

将VisuAlgo气泡排序代码转换为Javascript,javascript,for-loop,if-statement,do-while,bubble-sort,Javascript,For Loop,If Statement,Do While,Bubble Sort,从我在这个网站上找到的排序算法开始(它真的很酷,它让你在算法运行时可视化…),我想把它们的代码[我不知道它是什么语言…]翻译成Javascript,并将其应用到要排序的数字数组中 在多次尝试之后,我仍然没有对其进行排序,并且我的代码没有提供排序后的数组 1) 有没有关于如何修复的建议 2) 我看到VisuAlgo代码在for循环中,在do while循环中使用if语句。。。这在Javascript中可能吗?对我来说,它看起来像是do中的if-else语句,而(参见我的实际代码)可以替换的 谢

从我在这个网站上找到的排序算法开始(它真的很酷,它让你在算法运行时可视化…),我想把它们的代码[我不知道它是什么语言…]翻译成Javascript,并将其应用到要排序的数字数组中

在多次尝试之后,我仍然没有对其进行排序,并且我的代码没有提供排序后的数组

  • 1) 有没有关于如何修复的建议
  • 2) 我看到VisuAlgo代码在
    for
    循环中,在
    do while
    循环中使用
    if
    语句。。。这在Javascript中可能吗?对我来说,它看起来像是
    do中的
    if-else
    语句,而
    (参见我的实际代码)可以替换
谢谢大家!

VisuAlgo代码():

我的代码:

  function swap(element1, element2) {
    var t = element1;
    element1 = element2;
    element2 = t;
    return [element1, element2];
  };

  var startArray = [2, 1, 0, 5, 1];
  var swapped = true;

  do {
      for (i = 0; i < startArray.length; i++) {
        if (startArray[i] > startArray[i+1]) {
        swap(startArray[i], (startArray[i]+1));
        console.log(startArray);
        i++;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.log(startArray);
功能交换(元素1、元素2){
var t=元素1;
元素1=元素2;
元素2=t;
返回[element1,element2];
};
var startArray=[2,1,0,5,1];
var交换=真;
做{
对于(i=0;i星光[i+1]){
交换(星光[i],(星光[i]+1));
控制台日志(startArray);
i++;
}否则{
交换=假;
}
}
}
while(交换);
控制台日志(startArray);

您的代码有几个问题

    swap(startArray[i], (startArray[i]+1));
这显然是错误的。你可能是说

    swap(startArray[i], startArray[i+1]);
但我不明白如何使用您的交换代码。您如何处理此函数返回的值

也许更好的代码是

 [startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]));
你也可以用更紧凑的方式做同样的事情

startArray[i]=[startArray[i+1], startArray[i+1]= startArray[i]][0];
我还没有测试代码,但它应该可以工作

如果数组较大,则更喜欢插入排序而不是冒泡排序。它通常更快,易于实现。

最终代码:

function swap(element1, element2) {
    var t = element1;
    element1 = element2;
    element2 = t;
    return [element1, element2];
  };

  var startArray = [2, 1, 9, 5, 1, 4,7, 457, 653, 43, 3];
  var swapped = true;

  do {
      for (i = 0; i < startArray.length; i++) {
        if (startArray[i] > startArray[i+1]) {
        [startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]);
        console.log(startArray);
        i = 0;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.log(startArray);
功能交换(元素1、元素2){
var t=元素1;
元素1=元素2;
元素2=t;
返回[element1,element2];
};
var startArray=[2,1,9,5,1,4,7457653,43,3];
var交换=真;
做{
对于(i=0;i星光[i+1]){
[startArray[i],startArray[i+1]]=swap(startArray[i],startArray[i+1]);
控制台日志(startArray);
i=0;
}否则{
交换=假;
}
}
}
while(交换);
控制台日志(startArray);

谢谢@Alain Merigot;添加了您提到的2个更改,结果有所改进,但仍然只有部分排序。我在for循环中去掉了I=1,并用I=0进行了修改,结果正常。我将最后的代码包含在下面,以供将来的读者阅读。
function swap(element1, element2) {
    var t = element1;
    element1 = element2;
    element2 = t;
    return [element1, element2];
  };

  var startArray = [2, 1, 9, 5, 1, 4,7, 457, 653, 43, 3];
  var swapped = true;

  do {
      for (i = 0; i < startArray.length; i++) {
        if (startArray[i] > startArray[i+1]) {
        [startArray[i], startArray[i+1]] = swap(startArray[i],startArray[i+1]);
        console.log(startArray);
        i = 0;
      } else {
      swapped = false;
      }
    }
    }
  while (swapped);
  console.log(startArray);