冒泡排序 這節(jié)我們來(lái)講大名鼎鼎的冒泡排序 原理:前后兩個(gè)數(shù)兩兩進(jìn)行比較,,如果符合交換條件,交換位置,,知道所有數(shù)據(jù)排序完成,,結(jié)束比較。 舉個(gè)小例子: 我們來(lái)給9,8,7,6,5,4,排序?yàn)?,5,6,7,8,9 var arr = [9,8,7,6,5,4] 排序比較的過(guò)程: 第一輪: 接著進(jìn)行第二輪的排序比較: (9在最大位置上,,所以在接下來(lái)的幾輪里不跟著參與) 再進(jìn)行第三輪的排序比較 (這一輪的8在最大位置,,以后也不再參與) 以此類(lèi)推… 經(jīng)過(guò)上面的每一輪比較,我們發(fā)現(xiàn)每一輪都取到一個(gè)最大的數(shù)放在最后 拿我們的第一輪9為例,,因?yàn)槲覀儽容^的方式是兩兩進(jìn)行比較的,,所以這個(gè)9就像一個(gè)泡泡一樣一層一層往上冒。所以我們把上面的過(guò)程稱(chēng)為冒泡排序 上面我們執(zhí)行了5輪,,這只是我們的分析過(guò)程,,真正的執(zhí)行過(guò)程還要通過(guò)循環(huán) 分析: 1.先定義一個(gè)外層循環(huán)i為總共循環(huán)了幾輪;i < arr.length 2.再定義每一輪比較的次數(shù)j,,j是總的元素個(gè)數(shù) – 當(dāng)前的元素,,第一輪是6-1,第二輪6-2…等等,,由于i是從0開(kāi)始,,所以我們要再減1;j < arr.length – i - 1 3.判斷前后兩個(gè)數(shù)是否復(fù)合交換條件,;arr[i] > arr[j + 1] 4.如果符合條件就交換位置,;tmp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = tmp; var arr = [9,8,7,6,5,4]; for(var i = 0; i < arr.length; i++){//比較的輪次 //每一輪比較的次數(shù) for(var j = 0; j < arr.length - i - 1; j++){ //判斷前后兩個(gè)數(shù)是否復(fù)合交換條換 if(arr[j] > arr[j + 1]){ var tmp = arr[j + 1]; arr[j + 1] = arr[j]; arr[j] = tmp; } } } alert(arr); 運(yùn)行結(jié)果如下 這里主要i和j主要難理解,需要花點(diǎn)時(shí)間自己去理解 必須要知道i和j的作用到底是干什么的 i=0時(shí),,j<5第一輪是0 1 ,,1 2 ,2 3 ,,3 4等等… i=1時(shí),,j<4第二輪是0 1 ,1 2 ,,2 3 等等… 以此類(lèi)類(lèi)推…… 這是從小到大進(jìn)行排列,,如果從大到小排列將數(shù)組的大于號(hào)改為小于號(hào)即可
|
|
來(lái)自: AnXuelin295 > 《待分類(lèi)》