一、基本思想
直接插入排序(最坏时间O(n*n))是将一个数据插入到已经排序好的列表中。假设列表已经从小到大排列好,此时又有个新数据插入,可以从列表尾部开始向前遍历,与新数据比较。如果新数据比当前遍历数据小时停止遍历,将新数据插入。
二、核心算法
三、事例
四、折半插入
由于直接插入排序,新数据是插入一个已经排序好的序列。所以在查找插入位置过程中其实就是对一个排序序列进行查找。我们可以采用折半查找来实现。
五、2-路插入
2-路插入是在折半插入上更一步改进,目的减少排序过程中的移动记录次数。此处思想有点像快速排序,指定个中值数将大于这个中值数的数放在一边,将小于这个中值数的数放在一边。从而减少比较次数。不过此算法需要消耗n个辅助空间,而且如果中值选的太大或者太小都会失去其优越性。
六、表插入
表插入用修改次指针来避免数据的移动,但是仍然需要比较数据。由于数据表是链式结构,为了能够应用于折半查找,所以需要重新排序。