求助c语言高手!!急~~~

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:24:57
选择法对整数由大到小排序:
void sort{int x[],int n}
{ int i,j,k,temp;
for (i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[j]>x{[k])k=j;
if(k!=i)
{temp=x[i];x[i]=x[k];x[k]=temp;}
}
}
我一直不明白其中k与i的关系,上面是把i赋值给了k,我还能理解,就是怎么后面还会有if(k!=i) {temp=x[i];x[i]=x[k];x[k]=temp;}的语句出现?我个人觉得上面的排序这样就可以实现:
{ int i,j,temp;
for (i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(x[j]>x{[k])
{temp=x[i];x[i]=x[j];x[j]=temp;}
}
请高手给我一个明白易懂的讲解!

可以实现,可是你的时间复杂度比上面的差了很多,这在大型程序中是不允许的,还有你这个需要不停的移动,

上面的
K在动,可是数组里面的数据没有动,你下面就是在动。
简单的来说,上面是移动小标,而你的程序在移动数据

你下面说的方法就行.
最开始的程序中,注意:if(x[j]>x[k])k=j;
原来k=i,当出现后面的数大于前的数(也就是x[j]>x[k])时,让k=j,而j一定是不等于i的数.所以判断k是否等于i就知道有没有x[j]>x[k]为真,为真就temp=x[i];x[i]=x[k];x[k]=temp;
所以上面的程序有点画蛇添足了!