簡體   English   中英

外循環第一次迭代后停止執行

[英]Execution stops after the first iteration of the outter loop

var array = [5,3,4,1]

for(var x = 0; x < array.length; x++){

    for(var y = array.length - 1; y >= x; y--){

        if(array[x] > array[y]){
          var temp = array[y];
          array[y] = array[x];
          array[x] = temp; 
    }
  }
}
console.log(array); 

//Output : [1,3,4,5]

我知道循環是為了交換循環本質上是在 x 大於 y 時交換兩個值。

[1,3,4,5]是 x = 0 時的結果,但為什么一旦 x = 1 就沒有任何變化,依此類推? 次要 for 循環不應該通過它的迭代運行並繼續交換值直到第一個循環達到array.length (4) 嗎?

編輯:關於我的思考過程在哪里的更多信息:第一次迭代后輸出為 [1,3,4,5],但是當它迭代到 x = 1 時呢? 那時,x[1] = 3,對嗎? 當 y 從 5 遞減到 4 到 3,但 3 > 1 時,if 語句失敗,因此我認為輸出更改為 [3,1,4,5]。 此時 x 迭代到 x[2],即 4,輸出變為 [4,3,1,5],最后,x[3] = 5,其中不能再進行交換

不明白你說的過程停止是什么意思。 以下是您的代碼的修改版本

var array = [5,3,4,1]
var count = 0, swap = 0;
for(var x = 0; x < array.length; x++){
    for(var y = array.length - 1; y >= x; y--){
        count++;
        if(array[x] > array[y]){
          swap++;
          var temp = array[y];
          array[y] = array[x];
          array[x] = temp; 
    }
  }
}
console.log('count', count, 'swap', swap,'array',array); 

計數 10 交換 1 個數組 [1, 3, 4, 5]

代碼是一個簡單的從最小到最大的交換排序算法。 第一次交換后,數組完全排序,因此沒有進一步的交換發生。 該循環確實運行了 10 次。

暫無
暫無

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

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