折半插入算法

活动地址:CSDN21天学习挑战赛

目录

一、折半插入算法说明

二、折半插入与直接插入算法的比较

三、算法流程

四、实例

五、总结

一、折半插入算法说明

    每次从原有数据中取出一个数,插入到已经排好序的序列中,直到所有数据取完;这个过程和直接插入排序类似,不同点在于如何寻找数据插入的位置。

二、折半插入与直接插入排序算法比较

 直接插入排序:有序序列从后到前逐一比较。

 折半插入排序:利用有序序列中元素已排好的特点,使用折半查找算法确定要插入元素的位置。

三、算法流程

 

四、实例

输出:从小到大排列的数组元素

代码:

int main()

{

   int a[6]={2,1,0,4,8,7};

   int left,right,i,j;

  int temp;

 for(i=1;i<6;i++)

 {

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

   {

        temp=a[i];

        left=0;

       right=i-1;

    while(left<=right)

    {

          int mid=(left+right)/2;

       if(a[mid]>temp)

         right=mid-1;

      else 

        left=mid+1;

 }

 for(j=i-1;j>=right+1;j--)

  {

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

  }

   a[right+1]=temp;

  }

}

for(i=0;i<6;i++)

cout<<a[i]<<" ";

return 0;

}

 运行结果:

 五、总结

折半插入排序算法是一种稳定的排序算法,比直接插入排序算法明显减少了关键字之间的比较次数,所以算法的速度比直接插入排序算法快,但两者元素的移动次数相同。所以两者的时间复杂度均为O(n^2)。折半插入排序的空间按复杂度O(1)。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值