折半插入排序
折半插入算法实现
折半插入就是对有序队列进行折半查找找到插入位置
将要插入的数据放置哨兵位
L[0] = L[i]
7 3 5 10 16 7 32 83 23 54 29 96
↑ low i-1 i
哨兵 high
mid = (low+high)/2
L[0] > mid
low = mid+1
0 1 2 3 4 5 6 7 8 9 10 11
7 3 5 10 16 7 32 83 23 54 29 96
↑ mid low high i
哨兵
mid = (low+high)/2
L[0] < mid
high = mid - 1
0 1 2 3 4 5 6 7 8 9 10 11
7 3 5 10 16 7 32 83 23 54 29 96
↑ high low i
哨兵 mid
high < low 结束循环
插入位置为 high + 1
将high+1这个位置腾开
从 i+1 开始 到 high + 1结束 往前挪动一个位置
0 1 2 3 4 5 6 7 8 9 10 11
7 3 5 10 10 16 32 83 23 54 29 96
↑ high i-1 i
哨兵
L[high + 1] = L[0]
0 1 2 3 4 5 6 7 8 9 10 11
7 3 5 7 10 16 32 83 23 54 29 96
↑ high i-1 i
哨兵 high+1
折半插入排序-算法分析