循环停止时为什么不这样做?

时间:2016-04-28 04:24:51

标签: javascript while-loop infinite

  

由于某种原因,我无法正确排序此代码。我正在更换订单号以便生成有序列表。

 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循环应该在数组排序时停止,但这种情况永远不会发生。

3 个答案:

答案 0 :(得分:2)

自此代码以来,你有一个无限循环:

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

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

不排序数组。

为什么不使用array.prototype.sort呢?

答案 1 :(得分:1)

试试这个,

仅当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 < length - 1; i++)

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

答案 2 :(得分:0)

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

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

这里你永远不会检查相关值是否被排序.....左边的值大于正确的值....(虽然我正在考虑排序函数的for循环中的长度为数组长度)

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

在C here

中引用此算法