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,在這裏沒有進一步的交換可能
是什麼讓你覺得它並沒有一直在運行? (在這個特定的例子中,它不必因爲數組在第一次迭代中被排序...) – Terminus
我的錯誤。我知道它一直在運行,我只是不明白爲什麼在第一次迭代後沒有任何變化。 – 87born
沒有任何變化,因爲沒有通過if語句。通讀一些關於編程的教程,這種事情將會在那裏提前。 – Terminus