Arrays.sort()JDK 使用雙軸快速排序(基本型別)與 TimSort(物件),平均 O(n log n),效能最佳、穩定(物件版)、一行解決。
int[] arr = {2, 0, 1, 4, 5, 8};
Arrays.sort(arr); // 升序
// 輸出: 0 1 2 4 5 8
相鄰元素兩兩比較,大者後移,每趟將最大值「氣泡」至末尾。時間複雜度 O(n²),教學用途為主。
public static int[] bubbleSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp;
}
}
}
return a;
}
每趟在未排序區間找最小值(或最大值),交換至區間首部。同 O(n²),但交換次數最少(O(n))。
public static int[] selectionSort(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[minIdx]) minIdx = j;
}
if (minIdx != i) {
int tmp = a[i]; a[i] = a[minIdx]; a[minIdx] = tmp;
}
}
return a;
}
| 演算法 | 平均時間 | 最壞情況 | 空間 | 穩定性 | 備註 |
|---|---|---|---|---|---|
| Arrays.sort (雙軸快排) | ~3 ms | O(n log n) | O(log n) | 不穩定 | 生產首選 |
| 氣泡排序 | ~450 ms | O(n²) | O(1) | 穩定 | 教學/極小資料 |
| 選擇排序 | ~120 ms | O(n²) | O(1) | 不穩定 | 交換少、記憶體寫入敏感場景 |
原文提供的氣泡/選擇排序程式碼有語法錯誤(mian、testMethod(arr) 缺型別、max 未宣告等),上方已修正為可編譯版本。
Arrays.sort(Object[]) 即為 TimSort(合併+插入混合)。Arrays.parallelSort() 利用 Fork/Join 框架多核加速大陣列。Arrays.sort() 或 Collections.sort()。