在每一次的排序中选出最小(或最大)的数,将其放在数组最前端,而后在后面的数中重复此步骤,最终达到排序的目的.前端
将存于数组首位数与后面的数依次比较,将其中的较小的数放到数组放到数组首位
将除存于第二位的数视做首位,重复第一步的操做
以此类推算法
这里以从小到大排序为例数组
# 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