请大家给我解释一下这个C程序,帮帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/05/11 18:24:14
我是一个初学者,才学到一维数组就碰到了一个让我看不懂的程序,请大家为我解释一下,程序如下:
main()
{
static int data[]={23,56,234,1,45,34,21,394,3,35};
int i,j,temp;
for(i=1;i<10;i++)
{
j=i-1;
temp=data[i];
while(data[j]>temp&&j>=0)
{
data[j+1]=data[j];
j--;
}
data[j+1]=temp;
}
for(i=0;i<10;i++)
printf("%d",data[a]);
printf("\n");
}
此程序我有三个地方不明白:
1:while(data[j]>temp&&j>=)zhe里面把temp换成data[j+1]不是更好吗?为什么要用temp?
2:temp=data[i],书上对这个解释说:前i-1个元素已排好序.对这个解释我感到不能理解.
3:data[j+1]=temp,书上解释说:把data[i]插到正确的位置上.我看不懂这个解释,此外,temp=data[i],j=i-1可换成j+1=i,那么data[j+1]=temp不就没什么意义了吗?
本人疑问较多,请大家耐心回答,谢谢,献上50分

1:用temp换data[j+1]是不行的,因为在程序的执行中i的值已改变,当你要用
改变以前的data[i]时就要用中间变量temp暂存
2:temp=data[i]却实代表前i-1个元素已排好序,
现在运行这个程序 :

当程序执行到第五行时 :
第一次循环:i=1
j=i-1=0;temp=data[1]=56;
到while语句:
data[0]=23>temp=56,显然不成立,所以不执行while语句:
data[1]=temp=56;
进入第二次循环:i=2;
j=i-1=1;temp=data[2]=234;
又到while语句:
data[1]=56>temp=234,显然不成立,所以不执行while语句:
data[2]=temp=234;
进入第三次循环:i=3;
j=i-1=2;temp=data[3]=1;
又到while语句:
data[2]=234>temp=1,显然成立,执行while语句
data[3]=data[2]=234;
j=j-1=1;
再次判断while语句:
data[1]=56>temp=1显然成立,执行while语句
data[2]=data[1]=56;
j=j-1=0;
再次判断while语句:
data[0]=23>temp=1显然成立,执行while语句
data[1]=data[0]=23;
j=j-1=-1
再次判断while语句:
因为j<0所以不成立
退出while 循环,执行下一步
data[0]=temp=1;
现在的i=3现在data[0]=1;data[1]=23,data[2]=56,data[3]=234;
显然 前i-1个元素已排好序

1、temp你就把它看成是临时拿数组中各元素和它前面所有元素比较大小的变量,如果把temp换成data[j+1]那么在进入while循环前没有问