- 原理
折半插入排序的基本思想和直接插入排序类似,区别是查找插入位置的方法不同,折半插入排序是采用折半查找法来查找插入位置的。
折半查找法的一个基本条件是序列已经有序,而从直接插入排序的流程中可以看出,每次都是在一个已经有序的序列中插入一个新的关键字,因此可以用折半查找法在这个有序序列中查找插入位置。
- 复杂度
最坏情况时间复杂度:O(n2),最好情况时间复杂度:O(nlog2n),则平均时间复杂度:O(n2)
空间复杂度:O(1)
- 实践
13,38,49,65,76,97 六个数字且他们为有序序列,在其中插入 27,步骤如下
下标: 0 1 2 3 4 5
low=0,high=5 (0+5)/2=2 27<49 在49的左半部分,low 不变,high=2-1=1
low=0,high=1 (0+1)/2=0 27>13 在13的右半部分,low=0+1=1,high 不变
low=1,high=1 (1+1)/2=1 27<38 在38的左半部分,low 不变,high=1-1=0
low > high , 所以最后 27 放于 high+1 的位置,即下标为 1 的位置