C语言选择排序,如果把if(a[min]>a[j])改为if(a[i]>a[j]),就不能成功排序,这是为什么?
int i,j,t,min,a[10];
printf("请输入10个数值:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("这10个数值原始数序为:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<10;j++)
if(a[min]>a[j])
min=j;
t=a[min];
a[min]=a[i];
a[i]=t;
}
printf("这10个数值排序后的顺序为:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
个人感觉这样写,更能体现选择排序的特点。而且也会少一些交换操作。每次选择当前未排序的部分的最小值,然后交换到未排序部分的最前端,这样排序部分增加一个元素,未排序部分减少一个元素。最后建议你写代码尽量适当的缩进和不要省了{},这样代码结构会更清晰一点。