//选择法
#include <stdio.h>
#define N 5
int main(int argc, char *argv[])
{
int a[N], i, j , max, k;
for(i = 0; i <= N-1; i++)
scanf("%d", &a[i]);
for(i = 0; i <= N-2; i++) //同冒泡法类似,需要进行N-1趟
{
k = i; //用k记下每趟中最大的值的序号,初始时默认最大值为当前遍历序号最低位
for(j=i+1;j<=N-1;j++)
{
if(a[j]>a[k])
k = j; //当前遍历序号的值比最低序号位对应的值大,则将序号用k记录下来
}
//一定要在这一趟遍历完,才进行交换
max = a[k]; //保存这一次调整的数据
a[k] = a[i];
a[i] = max;
}
for(i = 0; i <= N-1; i++)
printf("%4d\n", a[i]);
return 0;
}
同此前的冒牌法一样,可以进行由大到小或者由小到大的排序转换,以及对任意整数的调整,具体参考前文。