为什么这个while循环停止了?

问题描述 投票:1回答:3

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

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

javascript while-loop infinite
3个回答
2
投票

从这段代码开始,你有一个无限循环:

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

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

不排序数组。

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


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](幸运的是,这不会影响排序,但最好是正确无论如何)。


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

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

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

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

在C here中提到这个算法

© www.soinside.com 2019 - 2024. All rights reserved.