排序之选择法
文/ 城
同样的弄两层循环,用一个符号k记录比较数的下标,刚开始是0,也就是数组第一个元素,用循环选出i之后的数的最大值,最大值下标用k表示,满足i不等于k,然后与a[i],交换。
代码:
#include<stdio.h>
int main()
{
int a[100], i, n, j, temp, max, k;//n为需要排序的数的数量
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
k = i;//k为每次比较的第一个数, 就是左边的
for(j=i+1;j<n;j++)
{
if(a[j] > a[k])
k = j;//找出最大的a[j] 用k把下标记录下来
}
if(k!=i)//此时的a[k] 就是这一轮最大的与比较数交换 且不是比较数
{
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
}