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

選擇排序法(非傳統氣泡排序)C 語言實作與解析

     編輯:關於C

程式碼

#include <stdio.h>
#include <stdlib.h>
#define LEN 10

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

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

    puts("原始資料:");
    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;
        }
    }

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

演算法解析

  • 時間複雜度:O(n²),不論資料分佈。
  • 空間複雜度:O(1),原地排序。
  • 穩定性:不穩定(交換可能改變相等元素相對順序)。
  • 比較次數:固定 n(n-1)/2,但交換次數最多 n-1,優於氣泡排序的頻繁交換。

常見誤區

原文註解稱「單向氣泡排序」,實際程式碼為選擇排序。兩者差異:

特性氣泡排序選擇排序
核心動作相鄰比較交換,大值「浮」至末端掃描找極值,與首位交換
交換次數O(n²)O(n)
穩定性穩定不穩定
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved