碰到不明白的地方,请帮忙。
main(){
int line(int *q,int n);
int *p,i,a[3];
p=a;
for(i=0;i<3;i++)
scanf("%d",p++);
p=a;
line(p,3);
for(p=a,i=0;i<3;i++)
{printf("%d ",*p);p++;}
}
int line(int *q,int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(*(q+k)>*(q+j)) k=j;
if(k!=i)
{t=*(q+i);*(q+i)=*(q+k);*(q+k)=t;}
}
}
假设输入3个数:1 4 3 回车,运行结果为1 3 4。
我的想法是(肯定是错的,但不知道错那了,请大家指出来):
第一次外循环:i=0,k=i=0;
第一次外循环里的第一次内循环:j=1,if(*(q+k)>*(q+j)),k=j=1. if(k!=i) 把*(q+0)与*(q+1)互换 结果为4 1 3
第一次外循环里的第二次内循环:j=2,if(*(q+k)>*(q+j)),k=j=2.if(k!=i) 把*(q+0)与*(q+2)互换 结果为3 1 4
第二次外循环:i=1,k=i=1;
第二次外循环里的第一次内循环:j=2,if(*(q+k)>*(q+j)),k=j=2. if(k!=i) 把*(q+1)与*(q+2)互换结果为3 4 1
到这里因为j<3,所以循环结束,但和运行的结果不对。郁闷啊!!!请大家解释的时候详细点。