算法——直接插入

    排序挨个来,今天到插入排序。下面来谈谈插入排序里的直接插入排序

    解决麻烦的事情,可以先从简单的 问题入手:咱们先开始两个数的插入排序。

    具体过程:先把要排序的数放到临时变量里,然后与第一个数比较,如果可以插入到第一个数的位置,然后第一个数向后移,即把第一个数放到第二个位置。最后再把第二个数放到第一个位置。

    

<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]);
}

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值