【初探】 二分(折半)插入排序

二分插入排序是对插入排序的改进,利用二分查找法提高寻找插入点的效率。它是一种稳定的排序算法,相比直接插入排序在比较次数上有所减少,但在元素移动次数上保持不变。在C++中,通过比较和后移赋值实现,时间复杂度为O(log2n)。
摘要由CSDN通过智能技术生成

基本概念


插入排序(binary insertion sort):是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。

其与直接排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。


算法描述和分析


● 一般来说,二分插入排序都采用“就地”数组上实现。具体算法描述如下:

1、从第一个元素开始,该元素可以认为已经被排序

2 取出下一个元素,在已经排序的元素序列中使用二分查找从后向前扫描

3、直到找到已排序的元素小于或者等于新元素的位置

4、 找到该位置后,如果该元素(已排序)大于新元素,将该元素移到下一位置

5、将新元素插入到该位置

6、  重复步骤2~6

二分查找比顺序搜索查找快,所以二分插入排序就平均性能来说比直接插入排序要快。
它所需的排序码比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。

在插入第i个对象时,需要经过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值