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

簡單選擇排序 C 實現:每輪選最小元素換到前端

     編輯:關於C語言

算法核心思想

第 i 輪在 [i, n-1] 中找到最小元素索引 min,與 i 位置交換。共需 n-1 輪。

完整代碼

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

void swap(int *a, int i, int j) {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

void SelectSort(int *a, int n) {
    int i, j, min;

    for (i = 0; i < n - 1; i++) {
        min = i;  // 假設當前位置最小
        for (j = i + 1; j < n; j++) {
            if (a[j] < a[min]) {
                min = j;  // 更新最小元素索引
            }
        }
        if (min != i) {  // 找到更小元素才交換
            swap(a, i, min);
        }
    }
}

int main() {
    int i = 0;
    int a[13] = {5, 4, 9, 8, 7, 6, 3, 0, 1, 2, 15, 24, 100};

    SelectSort(a, 13);

    for (; i < 13; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");

    system("pause");
    return 0;
}

執行演示

初始:[5,4,9,8,7,6,3,0,1,2,15,24,100]

i=0: 找最小 0(索引7) ↔ 5 → [0,4,9,8,7,6,3,5,1,2,15,24,100]
i=1: 找最小 1(索引8) ↔ 4 → [0,1,9,8,7,6,3,5,4,2,15,24,100]
i=2: 找最小 2(索引9) ↔ 9 → [0,1,2,8,7,6,3,5,4,9,15,24,100]
...
最終:[0,1,2,3,4,5,6,7,8,9,15,24,100]

複雜度分析

指標值說明
時間複雜度O(n²)最好/最差/平均同階,無提前終止機制
空間複雜度O(1)原地排序
穩定性不穩定交換可能改變相等元素相對序
交換次數O(n)每輪最多 1 次,比冒泡少

與冒泡排序對比

特性選擇排序冒泡排序(優化版)
比較次數固定 n(n-1)/2最好 n-1,最差 n(n-1)/2
交換次數≤ n-1最好 0,最差 n(n-1)/2
適應性無(不利用有序度)有(標誌位提前終止)
穩定性不穩定穩定

本文整理自「年少輕狂」博客,原文地址:https://shpshao.blog.51cto.com/1931202/1297434

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