氣泡排序就是相鄰的兩個數進行比較,將大的放在後面,小的放在前面。換句話說就是,前面的數比後面的數大,就交換位置,否則不換位置,**:以陣列
5156455
8654
第一趟排序
第一次:51和56比較,不交換位置
5156455
8654
第二次:56和45比較,交換位置
5145565
8654
第三次:56和5比較,交換位置
5145556
8654
第四次:56和86比較,不交換位置
5145556
8654
第五次:86和54比較,交換位置
5145556
54第一趟得到結果 51,45,5,56,54,86
第二趟排序
第一次:51和45比較,交換位置
4551556
54第二次:51和5比較,交換位置455
5156
54第三次:51和56比較,不交換位置455
5156
54第四次:56和54比較,交換位置455
5154
56第二趟得到的結果:455
5154
第三趟排序
第一次:45和5比較,交換位置545
5154
第二次:45和51比較,不換位置545
5154
第三次:51和54比較,不交換位置545
5154
第三趟得到的結果:545
51第四趟排序
第一次:5和45比較,不交換位置545
51第二次:45和51比較,不交換位置545
51第三趟得到的結果:545
第五趟排序
第一次:5和45比較,不交換位置545
第五趟得到結果
5最終結果為
**實現:
function res(arr)}}
return arr
}console.log(res([5,4,2,6,7,8,2]))
這樣就基本把冒泡寫好了,時間複雜度是o(n*n),但是還可以優化一下因為我們的**的第二個for迴圈,長度每次都是j如第一趟把 86 放在最後面了
5145556
54按照j也就是說趟之後,對比的長度要減少一位
function res(arr)}}
return arr
}console.log(res([5,4,2,6,7,8,2]))
這樣得到的時間複雜度也是n*n, 但是減少了不必要的排序
但是還可以再優化一下,比如有時候會有這種情況,例如陣列12
354按照氣泡排序,只需要一遍就可以排序完了,但是上面的**,會一直排序到最後,不會判斷當前的陣列是否已經排序完畢,所以這時候我們可以這麼做,我把思路寫下來。
首先我們設定乙個標誌
在某一趟全部不需要置換的時候,就排序完了
就執行了2趟,因為第二趟不需要置換位置,所以就認為全部置換完畢
這時候最好的結果就是執行了1遍,複雜度就是o(n)
所以氣泡排序的時間複雜度是
最好情況
最壞情況
平均情況
o(n)
o(n*n)
o(n*n)
JS實現氣泡排序
氣泡排序的重要思想 相鄰資料對之間比較 比較完後大數始終大數在小數後面於是每一次相鄰資料對比較完後,大數就往上冒一點 所以,當資料為正序排列時 最好情況 比較次數,移動次數,時間複雜度最小 比較次數為 n 1 次 移動次數為 0 次 時間複雜度為 o n 然而,當資料為反序排列時 最差情況 比較次數...
JS實現氣泡排序
1.氣泡排序 思路 a 比較兩個相鄰的元素,如果後乙個比前乙個大,則交換位置 b 第一輪的時候最後乙個元素應該是最大的乙個 c 按照第一步的方法進行兩個相鄰的元素的比較,由於最後乙個元素已經是最大的了,所以最後乙個元素不用比較。function sort element console.log el...
JS實現氣泡排序
1,演算法簡介 氣泡排序是一種簡單的排序演算法,它的工作原理是重複走訪要排列的元素,一次比較兩個元素,若兩個元素有錯誤,則將它們交換,直到沒有元素再交換,排序結束。2,演算法描述 1 比較相鄰元素,如果第乙個比第二個大,就交換 2 對每一對相鄰元素作相同的工作,從第一對到最後一對,最後那個元素會是最...