簡體   English   中英

為什么這個while循環停止了?

[英]Why doesn't this while loop stop?

出於某種原因,我無法正確排序此代碼。 我正在更換訂單號以便生成有序列表。

 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 < 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表示這個算法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM