直接選擇排序
數組分成有序區和無序區,初始時整個數組都是無序區,然后每次從無序區選一個最小的元素直接放到有序區的最后,直到整個數組變有序區。
選擇排序的步驟是這樣的:
首先,找到數組中最小的元素,將它和數組的第一個元素交換位置。
第二步,在剩下的元素中繼續尋找最小的元素,和數組的第二個元素交換位置。
如此循環,直到整個數組排序完成。
#include <stdio.h>
int main () {
int list[15] = {5,23,86,21,43,67,45,34,58,23,102,123,11,22,1};
int i, j, temp,min;
for(i = 0; i< 15;i++)
{
//令最小值等於無序區的第一個值
min = list[i];
temp = i;
//找到無序區的最小值
for(j = i; j<15;j++)
{
if(min>list[j])
{
temp = j;
min = list[j];
}
}
//交換
list[temp] = list[i];
list[i] = min;
temp = 0;
}
for (i = 0;i < 15; i++)
printf("%d\n",list[i]);
}
圖解選擇排序
我們以[ 8,2,5,9,7 ]這組數字做例子。
第一次選擇,先找到數組中最小的數字 2 ,然后和第一個數字交換位置。(如果第一個數字就是最小值,那么自己和自己交換位置,也可以不做處理,就是一個 if 的事情)

第二次選擇,由於數組第一個位置已經是有序的,所以只需要查找剩余位置,找到其中最小的數字5,然后和數組第二個位置的元素交換。

第三次選擇,找到最小值 7 ,和第三個位置的元素交換位置。

第四次選擇,找到最小值8,和第四個位置的元素交換位置。

最后一個到達了數組末尾,沒有可對比的元素,結束選擇。
如此整個數組就排序完成了。
