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

C 語言選擇排序演算法詳解與實作

     編輯:關於C語言

演算法核心邏輯

  1. 從未排序區找出最小元素的索引。
  2. 將該元素與未排序區首位元素交換。
  3. 未排序區起始位置後移一格,重複直到剩最後一個元素。

程式碼實作

#include 
#include 

#define N 10

int main() {
    int a[N], i, j, k, t;
    printf("隨機產生 10 個 100 以內的數:\n");
    for (i = 0; i < N; i++) {
        a[i] = rand() % 100;
        printf("%d ", a[i]);
    }
    printf("\n");

    for (i = 0; i < N-1; i++) {
        k = i;                              /* 記錄最小值索引 */
        for (j = i+1; j < N; j++)
            if (a[j] < a[k]) k = j;
        if (k != i) {                       /* 僅在必要時交換 */
            t = a[i]; a[i] = a[k]; a[k] = t;
        }
    }

    printf("排序後:\n");
    for (i = 0; i < N; i++) printf("%d ", a[i]);
    return 0;
}

演示圖解

選擇排序示意圖

執行結果

選擇排序執行結果

複雜度與特性分析

指標數值
時間複雜度O(n²) —— 最好/最壞/平均皆同
空間複雜度O(1)
交換次數最多 n-1 次 —— 所有排序中最少
穩定性不穩定(交換可能改變相等元素相對順序)

優化與變體

  • 雙向選擇排序:同時找最小與最大,放至兩端,趟數減半。
  • 堆積排序:用堆結構優化「找最小」至 O(log n),整體達 O(n log n)。
  • 適用場景:寫入成本極高(如 EEPROM、Flash)時,因交換次數少具優勢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved