【问题标题】:Why doesn't this while loop stop?为什么这个while循环不停止?
【发布时间】:2016-08-22 15:51:16
【问题描述】:

由于某种原因,我无法正确排序此代码。我正在替换乱序号以制作有序列表。

 var unsortedArray = new Array(1,2,5,4);

    var sortedArray = unsortedArray;
    var tempValue = 0;

    function isSorted(array)
    {
        for (i = 0; i < array.length; i++)
        {
            if (array[i] > array[i+1])
            {
                return false;
            }
        }
        return true;
    }

    function sort(array)
    {



        while (isSorted(array) == false)
        {
            for (i = 0; i < length; i++)
            {
                var tempValue = array[i];

                array[i] = array[i+1];
                array[i+1] = tempValue;
            }
        }
    }

    sort(sortedArray);

    document.write(sortedArray);

这里的while循环应该在数组排序后停止,但这永远不会发生。

【问题讨论】:

  • 假设:数组未按预期排序。
  • for (i = 0; i &lt; length; i++) 你在哪里得到length,我没有看到它在任何地方定义,所以你应该排序的for循环不会运行,或者将使用全局length属性并将使用它数字而不是你想要的任何东西
  • 您的排序不是比较元素以查看它们是否需要交换。无论他们是否需要,它总是交换它们。所以数组永远不会进入排序状态。

标签: javascript while-loop infinite


【解决方案1】:

因为这段代码,你有一个无限循环:

for (i = 0; i < length; i++)
    {
        var tempValue = array[i];

        array[i] = array[i+1];
        array[i+1] = tempValue;
    }

不对数组进行排序。

为什么不改用array.prototype.sort

【讨论】:

  • 我试图不使用排序方法,我正在尝试用自己的方式对数字进行排序。
  • 你可以像这样arr.sort(function(a,b){ if(a &gt; 12) return a; return b;}); 用你自己的逻辑添加一个比较函数
【解决方案2】:

试试这个,

仅当a[n] 小于a[n-1] 时才会交换元素。

while (isSorted(array) == false)
{
    for (i = 0; i < length-1; i++)
    {
      if(array[i]>array[i+1]){
             var tempValue = array[i];
             array[i] = array[i+1];
             array[i+1] = tempValue;
       }
}

它还将 for 循环更改为 for(var i = 0; i &lt; length - 1; i++)

否则,在数组末尾,您将访问未定义的array[length](幸运的是,这不会影响排序,但最好还是正确)。

【讨论】:

    【解决方案3】:
    for (i = 0; i < length; i++)
        {
            var tempValue = array[i];
    
            array[i] = array[i+1];
            array[i+1] = tempValue;
        }
    

    在这里,您永远不会检查相邻值是否已排序.....左侧值大于右侧值....(尽管我正在考虑排序函数的 for 循环中的长度为数组长度)

    查看一个简单的冒泡排序算法,然后尝试.....

    在 C here 中引用这个算法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 2022-09-25
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      相关资源
      最近更新 更多