内部排序之插入排序(InsertSort)

一、基本思想

直接插入排序(最坏时间O(n*n))是将一个数据插入到已经排序好的列表中。假设列表已经从小到大排列好,此时又有个新数据插入,可以从列表尾部开始向前遍历,与新数据比较。如果新数据比当前遍历数据小时停止遍历,将新数据插入。

二、核心算法

这里写图片描述

三、事例

这里写图片描述

四、折半插入

由于直接插入排序,新数据是插入一个已经排序好的序列。所以在查找插入位置过程中其实就是对一个排序序列进行查找。我们可以采用折半查找来实现。
这里写图片描述

五、2-路插入

2-路插入是在折半插入上更一步改进,目的减少排序过程中的移动记录次数。此处思想有点像快速排序,指定个中值数将大于这个中值数的数放在一边,将小于这个中值数的数放在一边。从而减少比较次数。不过此算法需要消耗n个辅助空间,而且如果中值选的太大或者太小都会失去其优越性。
这里写图片描述

六、表插入

表插入用修改次指针来避免数据的移动,但是仍然需要比较数据。由于数据表是链式结构,为了能够应用于折半查找,所以需要重新排序。
这里写图片描述

七、例题

LeetCode之Two Sum

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值