冒泡排序通過相鄰元素比較交換,將大元素逐步「冒泡」到數組末端。優化點:若某輪未發生交換,說明已有序,提前終止。
public void BubbleSort(int[] R)
{
int n = R.Length;
for (int i = 0; i < n - 1; i++)
{
bool exchanged = false;
// 每輪將最大值推到 n-1-i 位置
for (int j = n - 2; j >= i; j--)
{
if (R[j + 1] < R[j])
{
int temp = R[j + 1];
R[j + 1] = R[j];
R[j] = temp;
exchanged = true;
}
}
if (!exchanged) break; // 本輪無交換,已有序
}
}
| 細節 | 說明 |
|---|---|
外層循環 i < n-1 | 最多需 n-1 趟,最後一個元素自然就位 |
內層循環 j >= i | 已排好序的前 i 個元素無需再比較 |
exchanged 標志 | 檢測是否已有序,最佳情況 O(n) 提前結束 |
| 交換邏輯 | 標準三行交換,臨時變量 temp |
int[] arr = { 64, 34, 25, 12, 22, 11, 90 };
BubbleSort(arr);
// 結果: 11, 12, 22, 25, 34, 64, 90
int[] sorted = { 1, 2, 3, 4, 5 };
BubbleSort(sorted); // 單輪檢測後即 break,極快
j >= i 而非 j > i)