← 回首頁

氣泡排序法 (Bubble Sort) 視覺化工具

視覺化展示

已排序區域
比較 / 交換中
300ms

演算法偽代碼

function bubbleSort(arr):
1 n = arr.length
2 for i = 0 to n-2: // 共 n-1 輪
3 swapped = false
4 for j = 0 to n-2-i: // 已就位的不再比較
5 if arr[j] > arr[j+1]:
6 swap(arr[j], arr[j+1])
7 swapped = true
8 if not swapped: break // 提前結束最佳化

操作原理

氣泡排序法是一種簡單直觀的排序演算法。它會重複地走訪過要排序的數列,一次比較兩個相鄰的元素,如果它們的順序錯誤就把它們交換過來。

走訪數列的工作會重複地進行,直到沒有再需要交換,這意味著該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換,慢慢「浮」到數列的尾端(或越小的元素浮到頂端)。

操作過程

  1. 比較相鄰元素: 比較陣列中第 1 個和第 2 個元素。如果第 1 個元素大於第 2 個元素,則交換它們。
  2. 向後移動: 接著比較第 2 個和第 3 個元素,依此類推,直到比較到最後一對相鄰元素。這一步完成後,最大的元素將會被移動到陣列的最後一個位置
  3. 重複步驟: 忽略已經排好序的最後一個元素,對剩下的元素重複步驟 1 和 2。
  4. 完成排序: 每進行一輪,需要比較的元素就少一個,直到所有元素都排序完畢。

複雜度分析

  • 時間複雜度 (最佳情況): O(n)
    當陣列已經是排序好的狀態時,氣泡排序只需進行一次走訪,發現沒有元素需要交換即可提早結束。
  • 時間複雜度 (平均/最壞情況): O(n2)
    當陣列是反序時,需要進行完整的 n 輪比較,每輪進行 n-i 次交換,因此效率較低。
  • 空間複雜度 (Space Complexity): O(1)
    氣泡排序是一種「原地排序 (In-place Sort)」,只需要一個額外的空間來暫存變數以進行交換,不需要額外的陣列配置。
🌙