首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

經典排序算法C語言實現系列(持續更新):直接插入、希爾、簡單選擇、堆、冒泡、快速、歸並、基數

     編輯:關於C語言

經典排序算法C語言實現系列(持續更新)

按分類整理八大經典排序算法,已完成五種,附帶可運行 C 代碼與關鍵優化說明。

1. 插入排序 — 直接插入排序

將無序區元素逐個插入有序區適當位置。可用二分查找優化比較次數(二分插入排序)。

for (i=1; i=0 && a[j]>tmp) { a[j+1]=a[j]; j--; }
    a[j+1] = tmp;
}

2. 插入排序 — 希爾排序

分組插入,逐步縮小增量(gap = n/2, gap/=2),最後 gap=1 即直接插入。利用「基本有序時插入排序極快」特性顯著提速。

3. 選擇排序 — 簡單選擇排序

每輪從無序區選最小元素與無序區首元素交換,共 n-1 輪。

4. 選擇排序 — 堆排序

待補充:建堆 + 反覆交換堆頂與末尾元素並下沉調整。

5. 交換排序 — 冒泡排序

相鄰比較交換,大元素逐漸「浮」到末尾。優化:設置標誌位,若某輪無交換提前結束。

6. 交換排序 — 快速排序(推薦)

單樞軸分區遞歸,平均 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

7. 歸並排序

待補充:分治合併,穩定,需 O(n) 輔助空間。

8. 基數排序

待補充:多關鍵字分配收集,線性時間,適用於整數/字符串定長鍵值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved