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

Why doesn't this while loop stop?

For some reason I cannot get this code to properly sort. I am replacing out of order numbers in order to make an ordered list.

 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);

The while loop here is supposed to stop when the array is sorted, but that never happens.

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

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

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

不对数组进行排序。

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

试试这个,

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

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

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

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

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

在 C 中引用此算法 here