排序挨个来,今天到插入排序。下面来谈谈插入排序里的直接插入排序
解决麻烦的事情,可以先从简单的 问题入手:咱们先开始两个数的插入排序。
具体过程:先把要排序的数放到临时变量里,然后与第一个数比较,如果可以插入到第一个数的位置,然后第一个数向后移,即把第一个数放到第二个位置。最后再把第二个数放到第一个位置。
<span style="font-family:KaiTi_GB2312;font-size:18px;">void Insert(int array[])
{
temp=array[1]; //第二个数放到临时变量
if( temp>array[0]) //第二个数与第一个数比较
{
array[1]=array[0]; //true 第一个数给第二个数空位置
}
array[0]=temp; //第二个数放到空位置
}</span>
由两个数推导到一堆数,不可避免的要加上循环。
数在数组元素空间的移位:当临时变量和数组元素比较为true时,前一位置的数移入后一位置。最后比较为false时,此时的位置就是要放入的位置。看下图:
该图的每一步对应核心代码的一次循环。意思是说,比较条件为true,进行数据向后移位。到最后一个条件为false时,执行最后一步,也就是说图上的第五步。
最后的代码:
void main()
{
int temp=0;
int array[]={13,42,54,32,65,1,45,76,88,33};
int i,j,k;
for(i=0;i<10;i++)
printf("%d\n",array[i]); //输出原有的元素
for (i=1;i<10;i++)
{
temp=array[i];
j=i;
while(temp<array[j-1]&&j>0) //核心代码
{
array[j]=array[j-1]; //条件为true时,向后移动元素
j--;
}
array[j]=temp;
}
for(i=0;i<10;i++) //输出最后的排序数组
printf("%d,",array[i]);
}