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

C語言排序算法:冒泡排序與選擇排序完整實現與對比

     編輯:關於C語言

C語言排序算法:冒泡排序與選擇排序完整實現與對比

最基礎的兩種 O(n²) 排序:冒泡排序 (相鄰交換、大元素冒泡到後) 與選擇排序 (每輪選最小、換到前)。

冒泡排序

void bubble_sort(int a[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int swapped = 0;
        for (int j = 0; j < n - 1 - i; j++) {
            if (a[j] > a[j+1]) {
                int t = a[j]; a[j] = a[j+1]; a[j+1] = t;
                swapped = 1;
            }
        }
        if (!swapped) break;  // 已有序提前結束
    }
}

特點:交換次數多,可優化提前終止。

選擇排序

void selection_sort(int a[], int n) {
    for (int i = 0; i < n - 1; i++) {
        int min_idx = i;
        for (int j = i + 1; j < n; j++)
            if (a[j] < a[min_idx]) min_idx = j;
        if (min_idx != i) {
            int t = a[i]; a[i] = a[min_idx]; a[min_idx] = t;
        }
    }
}

特點:交換次數少 (最多 n-1 次),無法提前終止。

過程演示 (7 23 12 4 33 21 2 17 13 9)

輪次冒泡排序狀態選擇排序狀態
初始7 23 12 4 33 21 2 17 13 97 23 12 4 33 21 2 17 13 9
17 12 4 23 21 2 17 13 9 332 23 12 4 33 21 7 17 13 9
27 4 12 21 2 17 13 9 23 332 4 12 23 33 21 7 17 13 9
34 7 12 2 17 13 9 21 23 332 4 7 23 33 21 12 17 13 9
.........
結果2 4 7 9 12 13 17 21 23 332 4 7 9 12 13 17 21 23 33

對比總結

指標冒泡排序選擇排序
時間複雜度O(n²)O(n²)
空間複雜度O(1)O(1)
穩定性穩定不穩定
交換次數多 (O(n²))少 (O(n))
最佳情況O(n) (已有序)O(n²)
適合場景小數據、近乎有序、教學寫入昂貴存儲(如Flash)、教學

優化方向

  • 插入排序:近乎有序時 O(n)
  • 希爾排序:間隔分組插入,O(n^1.3)
  • 快速排序/歸併/堆排序:O(n log n) 實用級
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved