【问题标题】:Translate VisuAlgo Bubble Sorting code to Javascript将 VisuAlgo 冒泡排序代码翻译成 Javascript
【发布时间】:2019-06-14 01:13:18
【问题描述】:

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

经过多次尝试,我仍然没有整理出来,我的代码也没有提供排序后的数组。

  • 1) 关于如何修复它的任何建议?
  • 2) 我看到 VisuAlgo 代码在 for 循环内、do-while 循环内使用 if 语句……这在 Javascript 中可行吗?在我看来,do while 中的 if else 语句(请参阅我的实际代码)可以替换 for

谢谢!

VisuAlgo 代码 (https://visualgo.net/en/sorting):

do

  swapped = false

  for i = 1 to indexOfLastUnsortedElement-1

    if leftElement > rightElement

      swap(leftElement, rightElement)

      swapped = true

while swapped

我的代码:

  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);

【问题讨论】:

    标签: javascript for-loop if-statement do-while bubble-sort


    【解决方案1】:

    您的代码存在一些问题。

        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];
    

    我还没有测试过代码,但它应该可以工作。

    如果您的数组很大,则更喜欢插入排序而不是冒泡排序。它通常速度更快且易于实施。

    【讨论】:

    • 谢谢@Alain Merigot;添加了您提到的 2 个更改,结果有所改善,但我仍然只得到了部分排序。我在 for 循环中取消了 i = 1 并用 i = 0 进行了更改,结果正常。我在下面为未来的读者提供了最终代码。
    【解决方案2】:

    最终代码:

    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);
    

    【讨论】:

      猜你喜欢
      • 2016-10-15
      • 2013-04-30
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多