選擇排序,C語言實現
阿新 • • 發佈:2018-12-08
選擇排序是不穩定排序,時間複雜度為O(n^2)。
選擇排序類似插入排序,把陣列分為兩部分,一部分已經排好序,一部分未排序。
剛開始的時候所有的元素都未排序,已排序的部分為空。就好像你手裡有十張牌,左手有零張,右手有10張。每次從右手的牌中取最小的一張插入到左手的牌末尾,右手的牌插完了,排序也完成了。
選擇排序雖然和氣泡排序同為時間複雜度O(n^2)級別的排序,但是它的移動次數少,最多交換n-1次,所以適合儘可能少移動元素的排序,比方說碼頭集裝箱排序,移動集裝箱的成本很高,要儘可能少移動。
選擇排序程式碼如下:
#include <stdio.h> voidchoseSort(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; }