【问题标题】:Why does this bubble sort leave 2 elements in the wrong order?为什么这种冒泡排序会以错误的顺序留下 2 个元素?
【发布时间】:2020-07-04 16:38:11
【问题描述】:

我从冒泡排序算法的伪代码示例中翻译了这段代码,但是当我实现它时,它在错误的地方返回了 2 个值。

代码如下:

var numbers = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
var swapMade;
var temp;

function setup() {
  swapMade = true;
  
  while (swapMade == true) {
    swapMade = false;
  
  for (var i = 0; i < numbers.length - 2 ; i++) {
      if (numbers[i] > numbers[i+1]) {
        temp = numbers[i];
        numbers[i] = numbers[i+1];
        numbers[i+1] = temp;
        swapMade = true;
      }
    }
  }
  
  console.log(JSON.stringify(numbers));
}

setup();

这会返回:

[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]

所以101 放错地方了。

有人知道为什么吗?

【问题讨论】:

  • i &lt; numbers.length - 2
  • i &lt; numbers.length - 1i &lt;= numbers.length - 2

标签: javascript sorting bubble-sort


【解决方案1】:

您需要在 for 循环中将 i &lt; numbers.length - 2 更改为 i &lt; numbers.length - 1

使用i &lt; numbers.length - 2,您的循环将在评估最后一个元素之前退出。

【讨论】:

    【解决方案2】:

    您应该迭代直到索引等于numbers.length - 1。目前,您没有将索引 numbers.length - 2 处的倒数第二个元素与您在 numbers.length - 2 之前停止的最后一个元素进行比较。

    var numbers = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
    var swapMade;
    var temp;
    
    function setup() {
      swapMade = true;
      
      while (swapMade) {
        swapMade = false;
      
      for (var i = 0; i < numbers.length - 1 ; i++) {
          if (numbers[i] > numbers[i+1]) {
            temp = numbers[i];
            numbers[i] = numbers[i+1];
            numbers[i+1] = temp;
            swapMade = true;
          }
        }
      }
      
      console.log(JSON.stringify(numbers));
    }
    
    setup();

    【讨论】:

      【解决方案3】:

      由于i &lt; numbers.length -2,代码缺少一次迭代

      尝试将其更改为 i &lt; numbers.length - 1 以修复它。

      i &lt; numbers.length - 1 将从第一个索引 (0) 到第二个到最后一个索引来解释 i+1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        • 2012-07-13
        • 2019-12-14
        相关资源
        最近更新 更多