冒泡排序的文章一搜很多很多,但是我看了好多的文章基本就是簡單的貼上了自己的程式,簡單了就說了需要兩層for循環具體的為啥需要兩層,不曾細說,今天小編檢視了教材上的一個相關例子,算是具體詳細了解這兩層循環具體是個神麼鬼:
舉栗子:數組[9,7,5,4,3,2];看圖寫話:
:

(明顯看出來這個圖比上個圖好看多了,也不改動上面的圖了,算是一個進步的過程展現吧)
第一趟的比較,最大數9 已經到了最下面,第二趟的比較就是把第二大的數7擠到最下面,如圖,7下來了。這次比較的是4次。。。好了,我們來推算一下
兩個數,兩兩比較,我們隻需要比較一趟,就可以大小排列,三個數我們需要兩趟;四個數我們需要3趟;六個數需要5趟;按上面的畫法,我們畫5張圖就完成任務了;n個數就比較了(n-1)趟;每一趟中比較了幾次呢?上圖,第一趟比較了5次,第二次比較了4次。。。那麼第j趟就比較了第(n-j)次;好了,理清楚了:
n個數比較了 n-1 趟,在每一趟中比較了 n-1-i次;i表示趟,j表示每趟的次數
下面就是代碼實作了:
var array = [9,7,5,4, 3, 2];
var temp = 0;
for (var i = 0; i < array.length-1; i++){
for (var j = 0; j < array.length-1-i; j++){
if (array[j] > array[j + 1]){
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
console.log(array);//[2,3,4,5,7,9]
外層比較的時候趟數,内層是比較的是次數;
兩個數比較大小的的話就是這樣的套路(這裡就說這麼一個):
看圖了解吧! temp = b;b =a; a = temp;
運作結果這樣的:
看官,看明白沒?連寫帶畫圖寫了一個小時,如果有不足或者錯誤之處,敬請批評!
每日一句:Combine open-source packages with your private code and publish to a private registry behind the firewall.(npm的子產品介紹中)
翻譯:将開源包與私有代碼相結合,并将其釋出到防火牆後面的私有系統資料庫中。