在每一次的排序中選出最小(或最大)的數,將其放在數組最前端,而後在後面的數中重複此步驟,最終達到排序的目的.前端
將存於數組首位數與後面的數依次比較,將其中的較小的數放到數組放到數組首位
將除存於第二位的數視做首位,重複第一步的操做
以此類推算法
這裏以從小到大排序爲例數組
# include<stdio.h> void swap(int *p, int *q) { int temp; temp = *p; *p = *q; *q = temp; } int main() { int i, j, n, t; int a[100]; scanf("%d", &n);//輸入要排序的數組元素個數 getchar(); for(i=0;i<n;i++) scanf("%d", &a[i]);//遍歷數組 for(i=0;i<n-1;i++)//從首位開始,注意:最後一個數因爲已經被動和前面全部數進行了比較,故不須要再主動比較 { int min=i; for(j=i+1;j<n;j++)//依次和後面的數比較找出最小的數 if(a[j]<a[i]) min=j; if(min != i)//若是最小的數不是首位,則交換 swap(&a[min],&a[i]); } for(i=0;i<n;i++) printf("%d ", a[i]); }
選擇排序是不穩定的,如:5 8 5 2這個數列,當第一個"5"與"2"和交換後,第一個"5"就到了第二個"5"後面code