冒泡排序
冒泡排序是一種計算機科學領域的較簡單基礎的排序演算法,其基本思路是,對于一組要排序的元素列,依次比較相鄰的兩個數,將比較小的數放在前面,比較大的數放在后面,如此繼續,直到比較到最后的兩個數,將小數放在前面,大數放在后面,重復步驟,直至全部排序完成,

冒泡排序步驟

? 15 – 26 – 58 – 45 – 24 – 6 – 1
? 兩兩相互比較,小的放在前面,大的放在后面

? 第一輪:共比較6次

第二輪:共比較5次,最后組已經確定為最大,所以在第一輪的前提上少一輪,故此5次比較,
共減少1次比較

第三輪:共比較4次,最后兩組已經確定由小到大,所以在第二輪的基礎上再次減少一次比較,
共減少2次比較

**第四輪:**共比較3次,最后三組已經十分確定大小,所以在第三輪的基礎上再次減少一次比較,
共減少3次比較

第五輪:共比較2次,最后四組已經確定大小,所以在第四輪的基礎上再次減少一次比較,
共減少4次比較

第六輪:比較1次,后五組已經確定大小,所以在第五輪的基礎上再次減少一次比較,
共減少5次比較
提示
1.自第二輪開始,最后一個陣列已經確定為最大值,所以沒有必要在去進行排序,故每次排序都比上一次排序減少一次,
代碼實作
1.定義一個陣列
var arr=[15,26,58,45,24,6,1];
2.確定回圈輪數 (i)
具陣列分析,共7個數值,回圈6次,
也就是說陣列里的數值為n個,則需要回圈n-1次,
for(var i=1 ;i<arr.length;i++) //arr.lenth =7
所以說這個回圈可以回圈6次,
3.確定兩兩比較的次數,(j)
具上圖分析,
第一輪,需要6次比較,全部比較
第二輪,需要5次比較,相比上一輪,少比較一次,
第三輪,需要4次比較,相比上一輪,少比較二次,
那么得出結論,
弟i輪的時候,需要比較(陣列長度-i)次,
for(var j=1;j<=arr.length-i;j++)
OR
for(var j=0;j<arr.length-i;j++)
4.進行比較
if(arr[j-1]>arr[j]){
[arr[j-1],arr[j]]=[arr[j],arr[j-1]];
}
如果前一個數值,大于第二個數值,那么它倆互換位置,
5.整合代碼
當進行第一輪比較時,需要進行完六次數值之間的比較,才能進行下一輪,
也就是說,輪數比較應該將數值比較包涵在內,
//定義一個陣列
var arr=[15,26,58,45,24,6,1];
for(var i=1 ;i<arr.length;i++){ //排序輪數回圈
for(var j=1;j<=arr.length-i;j++){ //數值兩兩比較的次數
//判斷比較數值的大小
if(arr[j-1]>arr[j]){
[arr[j-1],arr[j]]=[arr[j],arr[j-1]];
}
}
}
-------------------------------------------有話想說-------------------------------------
多嘗試幾組陣列之間的排序,重新推導一遍更有助于理解冒泡排序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/203422.html
標籤:其他
