【问题标题】:Why does my sort implementation not work?为什么我的排序实现不起作用?
【发布时间】:2022-01-13 06:23:45
【问题描述】:

我正在尝试在不使用排序功能的情况下对整数数组进行排序。我知道 Stack Overflow 上还有其他可用的解决方案。我想知道我的代码有什么问题。它执行升序排序,除了数组中的第一个数字。

let arr = [2,4,5,1,3,7];
let iterable = true;
let iterationCount = 0;

while(iterable) {
 for(var i=iterationCount;i<=arr.length;i++) {
    if (arr[i] > arr[i+1]) {
      let temp=arr[i];
      arr[i]=arr[i+1];
      arr[i+1]=temp;
    }
 }
 iterationCount++;
 if (iterationCount == arr.length) {
    iterable = false;
 }
}

console.log(arr)

输出是 [2, 1, 3, 4, 5, 7] 而应该是 [1, 2, 3, 4, 5, 7]。

【问题讨论】:

  • 我会告诉你你的例子:它从 2 开始,2 不大于 4,因此它保持在原位......然后你继续循环 for 循环。然后你增加迭代次数并从第二个值开始,因此 2 被忽略,你从 4 开始,让 2 总是在第一个位置
  • 有什么建议可以解决吗?

标签: javascript sorting


【解决方案1】:

您可以更改外部循环以保留最后一个索引以进行检查并迭代直到最后一个索引之前,因为在第一个内部循环中,最大值现在位于最大索引处,并且任何进一步的迭代都不需要检查最新的最后一项。

let array = [2, 4, 5, 1, 3, 7],
    iterationCount = array.length;

while (iterationCount--) {
    for (let i = 0; i < iterationCount; i++) {
        if (array[i] > array[i + 1]) {
            let temp = array[i];
            array[i] = array[i + 1];
            array[i + 1] = temp;
        }
    }
}

console.log(array);

【讨论】:

    【解决方案2】:
    1. 每次绕过内部循环时,都会将每个元素向左移动 0 或 1 个空格。
    2. 每次绕过外循环时,都会从左侧再忽略一个元素。

    这意味着它假设在一个循环之后最左边的元素是最小的元素(并且在两个循环之后,最左边的两个元素是两个最小的)。

    但是,由于 (1),1 将从位置 3 移动到位置 2,但它需要位于位置 0。


    维基百科有一个selection of popular sorting algorithms,如果你从头开始实施排序,你应该阅读一下。

    【讨论】:

      【解决方案3】:

      我将 for 循环固定为始终从 0 开始,然后它就可以工作了。

      let arr = [2, 4, 5, 1, 3, 7];
      
      for (let j = 0; j < arr.length; j++) {
        for (let i = 0; i < arr.length; i++) {
          if (arr[i] > arr[i + 1]) {
            const temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
          }
        }
      }
      
      console.log(arr)

      编辑:我把整个事情缩短了一点

      【讨论】:

        猜你喜欢
        • 2021-04-23
        • 2019-10-11
        • 2019-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多