原理分析:
其原理是從頭開始臨近的數字兩兩進行比較,比較一輪戰罷,最小的或者最大的被交換到第一位或者最後一位,
其餘的再從頭進行兩兩比較,直到比較大到倒數第一位,此輪戰罷,最小的或者最大的排到了倒數第二位;。。依次類推遞歸
以我們數組[1,4,7,2,6,8,3,5,9]舉例:
第一輪排序:兩兩比較之後將最小值放置最後一位
第一次:交換1|4比較前:1|4|7|2|6|8|3|5|9
比較後:4|1|7|2|6|8|3|5|9第二次:交換1|7
比較前:4|1|7|2|6|8|3|5|9比較後:4|7|1|2|6|8|3|5|9
第三次:交換1|2比較前:4|7|1|2|6|8|3|5|9
比較後:4|7|2|1|6|8|3|5|9
第四次:交換1|6
比較前:4|7|2|1|6|8|3|5|9比較後:4|7|2|6|1|8|3|5|9
第五次:交換1|8
比較前:4|7|2|6|1|8|3|5|9比較後:4|7|2|6|8|1|3|5|9
第六次:交換1|3比較前:4|7|2|6|8|1|3|5|9
比較後:4|7|2|6|8|3|1|5|9第七次:交換1|5
比較前:4|7|2|6|8|3|1|5|9比較後:4|7|2|6|8|3|5|1|9
第八次:交換1|9
比較前:4|7|2|6|8|3|5|1|9
比較後:4|7|2|6|8|3|5|9|1
第二輪比較:
將其餘最小值放置倒數第二位:
第一次:交換4|7
比較前:4|7|2|6|8|3|5|9|1
比較後:7|4|2|6|8|3|5|9|1
第二次:4>2不進行交換
第三次:交換2|6
比較前:7|4|2|6|8|3|5|9|1
比較後:7|4|6|2|8|3|5|9|1
第四次:交換2|8
比較前:7|4|6|2|8|3|5|9|1
比較後:7|4|6|8|2|3|5|9|1
第五次:交換2|3
比較前:7|4|6|8|2|3|5|9|1
比較後:7|4|6|8|3|2|5|9|1
第六次:交換2|5
比較前:7|4|6|8|3|2|5|9|1
比較後:7|4|6|8|3|5|2|9|1
第七次:交換2|9
比較前:7|4|6|8|3|5|2|9|1
比較後:7|4|6|8|3|5|9|2|1
第三輪比較:
比較其餘最小值放置倒數第三位:
第一次:7>4 不交換
第二次:交換4|6
比較前:7|4|6|8|3|5|9|2|1
比較後:7|6|4|8|3|5|9|2|1
第三次:交換4|8
比較前:7|6|4|8|3|5|9|2|1
比較後:7|6|8|4|3|5|9|2|1
第四次:4>3 不交換
第五次:交換3|5
比較前:7|6|8|4|3|5|9|2|1
比較後:7|6|8|4|5|3|9|2|1
第六次:交換3|9
比較前:7|6|8|4|5|3|9|2|1
比較後:7|6|8|4|5|9|3|2|1
第四輪比較:
比較其餘最小值放置倒數第四位:
第一次:7>6 不交換
第二次:交換6|8
比較前:7|6|8|4|5|9|3|2|1
比較後:7|8|6|4|5|9|3|2|1
第三次:6>4 不交換
第四次:交換4|5
比較前:7|8|6|4|5|9|3|2|1
比較後:7|8|6|5|4|9|3|2|1
第五次:交換4|9
比較前:7|8|6|5|4|9|3|2|1
比較後:7|8|6|5|9|4|3|2|1
第五輪比較:
比較其餘最小值放置倒數第五位:
第一次:交換7|8
比較前:7|8|6|5|9|4|3|2|1
比較後:8|7|6|5|9|4|3|2|1
第二次:7>6 不交換
第三次:6>5 不交換
第四次:交換5|9
比較前:8|7|6|5|9|4|3|2|1
比較後:8|7|6|9|5|4|3|2|1
第六輪比較:
比較其餘最小值放置倒數第六位:
第一次:8>7 不交換
第二次:7>6 不交換
第三次:交換6|9
比較前:8|7|6|9|5|4|3|2|1
比較後:8|7|9|6|5|4|3|2|1
第七輪比較:
比較其餘最小值放置倒數第七位:
第一次:8>7 不交換
第二次:交換7|9
比較前:8|7|9|6|5|4|3|2|1
比較後:8|9|7|6|5|4|3|2|1
第八輪比較:
比較其餘最小值放置倒數第八位:
交換8|9
比較前:8|9|7|6|5|4|3|2|1
比較後:9|8|7|6|5|4|3|2|1
排序完畢,輸出結果爲[9,8,7,6,5,4,3,2,1];
js代碼實現:
據此算法,我們不難寫出對應的js排序算法:
如下:
var bubbleSort=function(arr){var sortOver=false;
for(var i=0;i<arr.length;i++){for(var j=0;j<arr.length-i;j++){
if(arr[j]<arr[j+1]){var temp=arr[j];
arr[j]=arr[j+1];arr[j+1]=temp;
sortOver=true;}
}if(!sortOver){break;}
}
return arr;
}
總結:
冒泡排序在各種排序算法中算是比較容易理解的一種排序方式,它通過一趟又一趟比較數組中每個元素使得較大數據下沉,較小數據上升,
正因爲如此,冒泡排序是排序算法中排序比較慢的,屬於O(n^2)算法在實際運用中效率比較低,如果數據量大,還有可能造成內存溢出,在各種排序算法發展中處於初級階段
實際中應用不是特多,拋除效率問題,還是比較適合小數據量排序;