冒泡排序 通過重複遍歷陣列,比較相鄰元素並交換順序錯誤的配對,使較大元素逐漸「浮」至陣列末端。每輪遍歷確定一個最大值位置,下一輪範圍縮減一。
陣列:[6, 3, 8, 2, 9, 1]
[3, 6, 2, 8, 1, 9][3, 2, 6, 1, 8, 9][2, 3, 1, 6, 8, 9][2, 1, 3, 6, 8, 9][1, 2, 3, 6, 8, 9]public class BubbleSort {
public static void sort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) swap(arr, j, j + 1);
}
}
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
}
}
public static void sortOptimized(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
boolean swapped = false;
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); swapped = true; }
}
if (!swapped) break; // 本輪無交換,已有序
}
}
| 指標 | 數值 | 說明 |
|---|---|---|
| 最好時間 | O(n) | 已有序陣列,優化版單輪遍歷即終止 |
| 最壞時間 | O(n²) | 逆序陣列,需完整 n(n-1)/2 次比較與交換 |
| 平均時間 | O(n²) | |
| 空間複雜度 | O(1) | 原地排序 |
| 穩定性 | 穩定 | 相等元素不交換順序 |
生產環境大規模排序請使用 Arrays.sort() (Dual-Pivot QuickSort / TimSort) 或 Collections.sort()。