【数据结构】-排序-折半插入排序

折半插入排序通过折半查找减少直接插入排序中的数据比较次数,但并不改变移动次数,因此实际时间复杂度与直接插入排序相同。在已有序序列中,折半插入排序可能增加比较次数。编程实现时,需注意在low>high时停止查找,将元素移动至high+1位置,并确保算法稳定性。

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

【引入】

直接插入排序的序列特点是:有序序列+待插入元素+无序序列

分为两个步骤:第一:查找插入位置;第二:移动元素

既然是在有序序列中查找插入位置,因此可以想到用折半查找来寻找插入位置来减少数据比较的次数。

【注意】

1.并不是在任何情况下,折半插入排序都比直接插入排序的比较次数要少,在序列已经有序的情况下,直接插入排序只要比较一次即可,而折半插入要比较多次。

2.虽然降低了比较的次数,但是移动的次数并没有发生改变(两个算法找到的插入位置是相同的,所以要移动的元素也是相同的),而带来时间复杂度的主要因素还是移动,因此,折半插入排序的实际复杂度依然和直接插入排序的时间复杂度相同。

编程注意事项:

1.在low>high的时候停止查找,需要将【low~i-1】向后移动

2.移动后将num[0],复制到low所指向的位置,也就是high+1的位置

3.为了保证折半插入的稳定,在num[mid]==num[0]的时候应该在mid的右边寻找插入位置

疑问:最后要插入的位置是high+1其实high+1就是low&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vector<>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值