插入排序分为:直接插入排序、折半插入排序和希尔排序。
(1)直接插入排序
实例如下所示
直接插入排序的空间效率:仅使用常数个辅助单元,空间复杂度为O(1)。
时间效率:最好情况,表中元素已有序,此时插入一个元素,只需要比较一次而不用移动元素,所需要的比较次数为n-1,
时间复杂度为O(n)。
最坏情况,元素顺序与排序结果逆序,总的比较次数达到最大,所需要的比较次数为n(n-1)/2。总的时间复杂度为O(n^2)。
所以,直接插入排序的时间复杂度为O(n^2)。
直接插入排序是一种稳定的排序算法。
代码实现如下:(两种)
(2)折半插入排序
在直接排序基础上改进,排序表为顺序表。
折半查找的时间复杂度为O(n^2)。
是一种稳定的排序算法。
(3)希尔排序
算法思想:先将排序表分为若干个子表,再对各个子表进行直接插入排序,当整个表中的元素已呈“基本有序”时,再对全体记录进行一次直接插入排序。
增量di,要求小于n。
例题如下所示。
希尔排序代码:
希尔排序空间复杂度为O(1)
时间复杂度为O(n^2)。
仅适用于顺序存储的线性表,是一种不稳定的排序算法。