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

一、基本思想

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

二、核心算法

内部排序之插入排序(InsertSort)_第1张图片

三、事例

内部排序之插入排序(InsertSort)_第2张图片

四、折半插入

由于直接插入排序,新数据是插入一个已经排序好的序列。所以在查找插入位置过程中其实就是对一个排序序列进行查找。我们可以采用折半查找来实现。
内部排序之插入排序(InsertSort)_第3张图片

五、2-路插入

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

六、表插入

表插入用修改次指针来避免数据的移动,但是仍然需要比较数据。由于数据表是链式结构,为了能够应用于折半查找,所以需要重新排序。
内部排序之插入排序(InsertSort)_第5张图片

七、例题

LeetCode之Two Sum

你可能感兴趣的:(algorithm)