|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
main()
{
int a[10],temp,i,j,z;
printf("请输入十个数:\n");
for (i=0;i<10;i++)
scanf("%d",&a[i]);
for (i=0;i<9;i++)
{
for (j=1;j<10-i;j++)
if (a[i]<a[j])
{temp=a[j];a[j]=a[i];a[i]=temp;}
}
for (i=0;i<10;i++)
printf("%d ",a[i]);
}
代码如上,我知道正确的解法,但是我想知道上面的代码错在哪里了呢?比较之后直接把值赋给a【0】以此类推,这样不对吗?求指点!!
j 的第一轮循环完成后,初始的 a[9] 被推到了 a[0] 的位置,原来的 a[8] 被换到了 a[9] 的位置;
j 的第二轮循环,i = 1, 由于 j < 10 - 1 < 9,对数组而言,就只能调换到 a[8],就这样,a[9] 永远地留在了最后;
j 的第三轮循环,i = 2, 由于 j < 10 - 2 < 8,对数组而言,就只能调换到 a[7],就这样,a[8] 永远地留在了倒数第二;
。。。。。。
所以,这样排序的方法是错误的
|
|