C语言选择排序,为什么要用存储最小值而不能直接使用i

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]);
阅读 2.5k
1 个回答
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;
}

个人感觉这样写,更能体现选择排序的特点。而且也会少一些交换操作。每次选择当前未排序的部分的最小值,然后交换到未排序部分的最前端,这样排序部分增加一个元素,未排序部分减少一个元素。最后建议你写代码尽量适当的缩进和不要省了{},这样代码结构会更清晰一点。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进