C语言的插入排序

来源:百度知道 编辑:UC知道 时间:2024/09/21 08:10:44
用插入排序将10个数按由小到大的顺序排序
分析:第2个数和第1个数比较,如果第2个数小于第1个数,将第1个数向右移动,将第2个数插入,则第1,2个数按升序排序;第3个数和第2,1个数比较,移动,则3个数按升序排序;第4个数和第3、2、1个数比较,移动,则4个数按升序排序;这样一直循环下去。
#include<stdio.h>
main()
{
.int a[10]={20,46,33,12,79,55,28,11,58,67};
.int i,j;
.int temp;
.for(i=2;i<10;i++)
..{temp=a[i];
...j=i-1;
...while(j>=0&&temp<a[j])
....{a[j+1]=a[j];
.....j--;
....}
...a[j+1]=temp;
..}
.for(i=0;i<10;i++)
printf("%d",a[i]);
}
这是书上的习题,我看不明白的地方是两个FOR之间的部分,哪个高手能帮忙解释一下两FOR之间的部分啊,请具体的说详细些!

第一个for循环i=2,执行的是这三个数20,46,33的排序,按程序执行下来:
{
temp=a[i]; //temp=33
j=i-1;
while(j>=0&&temp<a[j]) //因为j=1,所以最多循环两次,具体还得看temp<a[j]的条件
{a[j+1]=a[j]; //第一次使得a[2]=46,第二次循环条件不成立,跳出循环
j--;
}
a[j+1]=temp; //a[1]=33

这样就完成了前三个数的排序,下面i++后i=3执行前三个数排序,原理同上!