C语言程序设计中插入法排序的结果分析与讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言中插入法排序的结果分析与讲解
写出下列程序的运行结果。从小到大的排序
void main()
{int a[10]={12,32,2,52,45,65,58,56,98,54},i,j,t;
for(i=1;i<=9;i++)
{ j=i-1;
t=a[i];
while(j>=0&&t>a[j])
{ a[j+1]=a[j];
j=j-1;
}
a[j+1]=t;
}
printf("\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
运行过程:
i=1也就是第二数开始开始的一直到最后一个,也下标为9那个数。外循环就从下标为1到最后一个。
i=1 外循环第一次循环时:
j=i-1=0 t=a[i]=a[1]=32
while(j>=0&&t=a[j],那就不插入到前面。
a[j+1]=t相当于j=0,a[j+1]=a[1]=t,相当于又把t放到原来的那个下标的位置,也就是不变。12,32,2,52,45,65,58,56,98,54
i=2也就第二次循环
j=i-1=1,j这个变量的值就是表示前面已经有几个数排好序了,现在有2个数已经排过序
t=a[i]=a[2]=12
while(j>=0&&t=0&&t=12 怎么插入到前面的呢?a[j+1]=a[j] 相当于a[2]=a[1],相当于把a[1]向后移一个位置,为要插入的这个数留位置。那么原来a[2]值被覆盖掉了,所以我们前面t=a[i],先把这个数保存起来。 j=j-1,j=0,那说明又和第一个数进行比较,原因有可能这个数比第一数还小,所以都要比完。现在t=2,a[j]=a[0]=12, 条件是j>=0&&t a[j+1]=a[j];a[1]=a[0]; j=j-1=-1 while循环的时候,条件不满足了,因为j=-1, a[j+1]=t; 2,12,32,52,45,65,58,56,98,54 第三次 2,12,32,52,45,65,58,56,98,54 第四次45 2,12,32,45,52,65,58,56,98,54 第五次65不变 2,12,32,45,52,65,58,56,98,54 第六次58 2,12,32,45,52,58,65,56,98,54 第七次56 如果从小到大,那么循环的时候,什么插入?当后面小于前面那个,才进行循环体。如果从到小,那就是后面要是大于前面那个数,才进行循环。 2,12,32,45,52,56,58,65,98,54