按分類整理八大經典排序算法,已完成五種,附帶可運行 C 代碼與關鍵優化說明。
將無序區元素逐個插入有序區適當位置。可用二分查找優化比較次數(二分插入排序)。
for (i=1; i=0 && a[j]>tmp) { a[j+1]=a[j]; j--; }
a[j+1] = tmp;
}
分組插入,逐步縮小增量(gap = n/2, gap/=2),最後 gap=1 即直接插入。利用「基本有序時插入排序極快」特性顯著提速。
每輪從無序區選最小元素與無序區首元素交換,共 n-1 輪。
待補充:建堆 + 反覆交換堆頂與末尾元素並下沉調整。
相鄰比較交換,大元素逐漸「浮」到末尾。優化:設置標誌位,若某輪無交換提前結束。
單樞軸分區遞歸,平均 O(n log n),原地排序,工程常用。代碼採用雙向掃描法:
void QuickSort(int a[], int n) {
if (n <= 1) return;
int i=0, j=n-1, key=a[0];
while (i < j) {
while (i=key) j--; a[i]=a[j];
while (i
待補充:分治合併,穩定,需 O(n) 輔助空間。
待補充:多關鍵字分配收集,線性時間,適用於整數/字符串定長鍵值。