氣泡排序是最基礎的排序演算法之一,透過相鄰元素兩兩比較並交換,將較大 (或較小) 的元素像氣泡一樣逐步「浮」到陣列末端。雖然時間複雜度為 O(n²),但其原理直觀,適合教學入門與極小資料集。
n-1 趟)。arr[j] 與 arr[j-1]。swapped = true。public class BubbleSorter
{
public void Sort(int[] arr)
{
for (int i = 1; i < arr.Length; i++)
{
bool swapped = false;
for (int j = arr.Length - 1; j >= i; j--)
{
if (arr[j] < arr[j - 1])
{
int tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
swapped = true;
}
}
if (!swapped) return; // 提前終止優化
}
}
}
// 測試
static void Main()
{
int[] data = { 1, 5, 11, 6, 4, 21, 99, 2, 15, 11, 34, 0, 33, 47 };
var sorter = new BubbleSorter();
sorter.Sort(data);
Console.WriteLine("氣泡排序結果:" + string.Join(" ", data));
}
| 情況 | 時間複雜度 | 說明 |
|---|---|---|
| 最佳 | O(n) | 陣列已有序,首趟無交換即終止 |
| 平均 | O(n²) | 隨機資料 |
| 最差 | O(n²) | 陣列逆序 |
| 空間 | O(1) | 原地排序 |
| 穩定性 | 穩定 | 相等元素不交換,相對順序不變 |
生產環境**絕不**手寫氣泡排序。請使用 Array.Sort / List<T>.Sort (Introspective Sort)。理解氣泡排序有助於建立演算法分析基礎 (最佳/平均/最差情況、穩定性、原地排序等概念)。