C语言中选择排序的一个小问题,想不通

来源:百度知道 编辑:UC知道 时间:2024/06/01 10:11:15
void selectsort(int array[],int n)
{
int i,j,temp,min;
for(i=0;i<n;i++)
{
min=i;
for (j=i+1;j<n;j++)
if(array[j]<array[i])
min=j;
temp=array[i];
array[i]=array[min];
array[min]=temp;
}
}

我不懂里面为什么要把min=j再用array[min]与array[i]去换,直接用array[j]与array[i]换不行吗? 虽然确实是排不出来,但是我是不明白,越想越糊涂

if(array[j]<array[i]) 只限制到了后面一句min=j;下面的三句if都没限制到。
而for循环体只包括到了if,所以循环体是
for(j=i+1;j<n;j++)
if(array[j]<array[i])
min=j;

而后面三句只有在循环结束了才执行,那时j=n,j就不等于min了

啊。。那个循环就是为了找到 min。。。如果直接用j,那j就是等于n了。。。j只是循环。。。min是j中确定的一个值。。

你的外面还有一层循环,要用到min,如果直接用array[j]和array[i]换,那外面的min值怎么办,还是要赋值的....

..........那就成了副职,而不是调换!