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

選擇排序法實作與分析:從冒泡排序到高效排序演進

     編輯:關於C語言

程式碼審視

原標題「冒泡排序改良」,實際程式碼實作為選擇排序:每輪掃描未排序區間最小值,與首位交換。

完整可執行程式

#include <stdio.h>
#include <stdlib.h>

#define LEN 10

int main(void) {
    int array[LEN];
    int i, j, min, tmp;

    printf("請輸入 %d 個整數:", LEN);
    for (i = 0; i < LEN; ++i) scanf("%d", &array[i]);

    printf("原始資料:");
    for (i = 0; i < LEN; ++i) printf("%d ", array[i]);
    putchar('\n');

    // 選擇排序
    for (i = 0; i < LEN - 1; ++i) {
        min = i;
        for (j = i + 1; j < LEN; ++j)
            if (array[min] > array[j]) min = j;

        if (min != i) {
            tmp = array[min];
            array[min] = array[i];
            array[i] = tmp;
        }
    }

    printf("排序結果:");
    for (i = 0; i < LEN; ++i) printf("%d ", array[i]);
    putchar('\n');
    return 0;
}

複雜度分析

指標選擇排序冒泡排序(優化版)快速排序
時間複雜度O(n²)O(n²)O(n log n) 平均
空間複雜度O(1)O(1)O(log n) 堆疊
穩定性不穩定穩定不穩定
交換次數O(n)O(n²)O(n log n)

優化方向

  • 小規模資料(n < 50)選擇排序常因低常數因子優於快排
  • 大規模資料建議 qsort / std::sort (Introsort)
  • 近乎有序資料:插入排序 O(n)

圖示說明

排序過程示意圖

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