C语言程序设计中插入法排序的结果分析与讲解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档