算法导论 2.3-6 可否在插入排序中加入二分查找
注意到2.1节中的过程INSERTION-SORT的第5~7行的while循环采用一种线性查找来(反向)扫描已排好序的子数组A[1..j-1]。我们可以使用二分查找(参见练习2.3-5)来把插入排序的最坏情况总运行时间改进到θ(nlgn)吗?
答案是不能。
我们先来看看INSERTION-SORT的伪代码:
第5~7行代码的作用不仅仅是查找key值(即A[j])所应该插入的位置,还包括将查找到的位置索引i所对应的元素全部往后赋值的操作。
如果改用二分查找来替代第5~7行代码,那么二分查找i的时间开销将会是θ(lgn),但是将A[i..j-1]的元素全部往后赋值的时间开销依然是θ(n),则最终整个INSERTION-SORT的时间开销依然是θ() 。