排序分析之直接插入排序

本文详细介绍了直接插入排序的原理及实现方法,包括基本思想、排序步骤,并提供了三种不同的实现方式:通过查找插入位置并移动元素、通过交换元素来实现排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接插入排序的思路是每次将一个新的数据插入到前面已经排好序的有序的数组中,重点是每次要找到插入的位置

代码:

void insertsort1(a[],n)

{

       for(int i=1;i<n;i++)//寻找位置,有序情况下,不做改变,无序情况j的位置之后就是应该插入的位置

           for(int j=i-1;j>=0;j--)

             if(a[j]<a[i])

                break;

      if(j!=i-1)//如果无序,就进行插入操作,插入位置之后的数据都后移,位置不断前移,直到应该插入的位置进行插入完成排序

      {

          int temp=a[i];

          for(int k=i-1;k>j;k--)

               a[k+1]=a[k];

         a[k+1]=temp; 

       }

}

对其可进行代码优化,将前移过程和搜索过程合并,比较a[i]和a[i+1]的大小如果有序则不处理如果无序,将a[i+1]插入a[0]到a[i]有序的数组中去,完成插入排序

代码:

void insertsort2(a[],n)

{

     for(int i=1;i<n;i++)

    {

         if(a[i-1]>a[i])//如果无序则将a[i]插入前面有序数组中

         {

               int temp=a[i];

               for(int j=i-1;j>=0&&a[j]>temp;j--)从i-1的位置开始前移,直到找到应该插入的位置

                   a[j+1]=a[j];

              a[j+1]=temp;

         }

    }

}

还可以通过交换的方式替换掉后移的方式,碰到无序的数字进行交换,在前面有序的数组中继续比较继续进行交换直到有序,即该数已经到达正确的位置

void insertsort3(a[],n)

{

       for(int i=1;i<n;i++)

       {

            if(a[i-1]>a[i])

           {

                for(int j=i-1;j>=0&&a[j]>a[j+1];j--)

                      swap(a[j],a[j+1]);

            }

          }

}

                        

     

 

转载于:https://www.cnblogs.com/pianruijie/p/6770482.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值