選基準,分區:左邊 ≤ 基準,右邊 ≥ 基準;遞歸處理左右子區。
partitionint partition(int head, int tail, int a[]) { int pivot = a[tail], i = head, j = tail; while (i < j) { while (i < j && a[i] <= pivot) ++i; while (i < j && a[j] >= pivot) --j; if (i < j) { swap(a[i], a[j]); ++i; --j; } } a[tail] = a[i]; a[i] = pivot; return i; }
maxheapify:將節點下沉,維持最大堆性質。buildmaxheap:自底向上構建堆。merge雙指針合併兩個有序子陣列,需 O(n) 輔助空間。
| 算法 | 平均時間 | 最壞時間 | 空間 | 穩定 | 適用場景 |
|---|---|---|---|---|---|
| 快速排序 | O(n log n) | O(n²) | O(log n) | 否 | 通用內存排序,標準庫 qsort/sort 基礎 |
| 堆排序 | O(n log n) | O(n log n) | O(1) | 否 | 實時系統、內存受限、需保證最壞情況 |
| 歸並排序 | O(n log n) | O(n log n) | O(n) | 是 | 外部排序、鏈表排序、需穩定性 |
| 插入排序 | O(n²) | O(n²) | O(1) | 是 | 小數組、近乎有序、混合排序基礎 |
| 冒泡排序 | O(n²) | O(n²) | O(1) | 是 | 教學演示 |
std::sort (Introsort: 快排+堆排+插入)、std::stable_sort (歸並)。