选择排序每一趟都要找到该趟比较的数中最小的那个数。
关键(假设十个数为9 8 7 4 5 6 1 2 3 0):
for (i=0;i<9;i++) //以下以第一趟为例,十个数要循环九趟
{
min=i; //假设i=0为最小数,即a[min]=9
for(j=i+1;j<10;j++) //从第二个数开始和第一个数比较
{ //j=1,a[j]=8
if(a[min]>a[j]) //因为9>8
{
min=j; //所以min=1,a[min]=8,此时j=1<10,所以j++,即j=2,a[j]=7
} //然后又将新的a[min]和新的a[j]比
} //以此类推,当第二个for循环第一次结束时就找到了第一轮中的最小值
if(min!=i) //并通过if语句将每一轮找到的最小值按顺序排好
{ //并且如果刚好定义的最小值是我们要找的该轮最小值,
t=a[min]; //那么就不进行交换,如果不是,则交换
a[min]=a[i];
a[i]=t;
}
}
完整代码:
#include<stdio.h>
int main()
{
int i,j,t,min,a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<10;j++)
{
if(a[min]>a[j])
{
min=j;
}
}
if(min!=i)
{
t=a[min];
a[min]=a[i]; // 此处要十分注意,a[min]是和a[i]交换位置而不是和a[j]交换位置
a[i]=t; //这样才能让每一轮的最小按顺序排好
} //好要注意应该在选出每一轮最小值后再进行交换
}
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
网友评论