步步看懂

Bubble Sort

氣泡排序

用互動動畫一步步看懂氣泡排序(Bubble Sort):自訂陣列、逐步顯示相鄰比較與交換,並計算比較與交換次數。

5011422384
比較次數
0
交換次數
0

氣泡排序在做什麼

氣泡排序反覆比較相鄰的兩個數字:如果左邊比右邊大,就交換它們。

  1. 從最左邊開始,比較相鄰兩個數字,順序不對就交換。
  2. 一趟掃描下來,目前最大的數字就會被帶到最右邊,那個位置從此固定。
  3. 下一趟只需要掃描到還沒固定的範圍。
  4. 如果某一趟完全沒有發生交換,代表已經排好,可以提早結束。

為什麼是 O(n²)

n 個數字需要最多 n − 1 趟,每一趟最多比較 n − 1 次,加起來是 n(n − 1) / 2 次比較。完全反序時,每次比較都要交換,交換次數也是 n(n − 1) / 2,這就是上方「最差情況」顯示的數字。

資料已經排好時,第一趟沒有任何交換就結束,只需要 n − 1 次比較。

複雜度

最佳O(n)
平均O(n²)
最差O(n²)
額外空間O(1)
穩定是

常見問題

為什麼叫氣泡排序?
每一趟都會把目前最大的數字一路交換到最右邊,就像氣泡浮到水面一樣。
氣泡排序最佳情況真的是 O(n) 嗎?
只有在加入「這一趟沒有交換就提早結束」的優化時才是。沒有這個優化,不管資料如何都是 O(n²)。這裡的動畫有加入該優化。
氣泡排序是穩定的嗎?
是。只有在左邊「嚴格大於」右邊時才交換,相等的值不會互換位置。