選擇排序,C語言實現


選擇排序是不穩定排序,時間復雜度為O(n^2)。

 

選擇排序類似插入排序,把數組分為兩部分,一部分已經排好序,一部分未排序。

剛開始的時候所有的元素都未排序,已排序的部分為空。就好像你手里有十張牌,左手有零張,右手有10張。每次從右手的牌中取最小的一張插入到左手的牌末尾,右手的牌插完了,排序也完成了。

選擇排序雖然和冒泡排序同為時間復雜度O(n^2)級別的排序,但是它的移動次數少,最多交換n-1次,所以適合盡可能少移動元素的排序,比方說碼頭集裝箱排序,移動集裝箱的成本很高,要盡可能少移動。

 

選擇排序代碼如下:

#include <stdio.h>

void choseSort(int arr[], int n) {
    int i, j;
    int min, temp;
    // 每次從未排序的部分選出一個最小的元素,最后一次只剩一個元素未排序
    // 此時實際上已經排好序,故只需要n-1次外層大循環
    for (i = 0; i < n - 1; ++i) {
        min = i;    // 假定未排序部分的第一個元素為最小的元素
        // 遍歷剩下的部分,找到最小的元素
        for (j = i + 1; j < n; ++j) {
            if (arr[j] < arr[min]) {
                min = j;
            }
        }
        // 如果第一個元素就是最小的元素,就不需要交換了
        if (min != i) {
            temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }
}

int main() {
    int i = 0;
    int arr[10] = {5, 2, 3, 8, 1, 2, 6, 9, 3, 7};
    choseSort(arr, 10);
    for (i = 0; i < 10; ++i) {
        printf("%d ", arr[i]);
    }
    return 0;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM