排序是演算法入門必修課。本文一次性給齊八大排序的 Java 標準實現:EightAlgorithms 工具類封裝所有靜態方法,TestEightAlgorithms 統一測試入口,附時間複雜度註解與實測輸出,適合教學、面試、基準測試參考。
| 算法 | 方法名 | 平均時間 | 最壞時間 | 空間 | 穩定性 |
|---|---|---|---|---|---|
| 插入排序 | insertSort | O(n²) | O(n²) | O(1) | 穩定 |
| 冒泡排序 | bubbleSort | O(n²) | O(n²) | O(1) | 穩定 |
| 選擇排序 | selectSort | O(n²) | O(n²) | O(1) | 不穩定 |
| 希爾排序 | shellSort | O(n^1.3~n^1.5) | O(n²) | O(1) | 不穩定 |
| 快速排序 | quickSort | O(n log n) | O(n²) | O(log n) | 不穩定 |
| 歸併排序 | mergeSort | O(n log n) | O(n log n) | O(n) | 穩定 |
| 堆排序 | heapSort | O(n log n) | O(n log n) | O(1) | 不穩定 |
| LSD 基數排序 | lstRadixSort | O(d(n+r)) | O(d(n+r)) | O(n+r) | 穩定 |
public class EightAlgorithms {
public static void insertSort(int[] a, int n) { ... }
public static void bubbleSort(int[] a, int n) { ... }
public static void selectSort(int[] a, int n) { ... }
public static void shellSort(int[] a, int n) { ... }
public static void quickSort(int[] a, int n) { _quickSort(a, 0, n-1); }
public static void mergeSort(int[] a, int n) { _mergeSort(a, 0, n-1); }
public static void heapSort(int[] a, int n) { ... }
public static void lstRadixSort(int[] a, int n, int radix, int distance) { ... }
// 私有輔助方法:_quickSort, _partition, _mergeSort, _merge, buildMaxHeap, upAdjust, adjustNode
}
int[] arr = {45,38,26,77,128,38,25,444,61,153,9999,1012,43,128};
for (int i = 1; i <= 8; i++) {
int[] copy = arr.clone();
switch(i) { case 1: EightAlgorithms.insertSort(copy, copy.length); break; ... }
printArray(copy);
}
25 26 38 38 43 45 61 77 128 128 153 444 1012 9999 (八種算法輸出完全一致,驗證正確性)
完整代碼可直接複製到項目作為算法工具包,或作為教學演示的標準參考實現。