思路:先用折半查找的方式找到应该插入的位置,再移动元素。
由于当前处理元素之前的元素已经是有序的,并且下面的例子是用顺序存储的方式来存储的,所以可以使用折半查找的方式来更快地找到当前处理元素的应该插入位置。
算法实现:
思路细节分析:
思考:为什么是 [low, i-1] 元素全部右移!
关键: low 和 high 值的变化只取决于 A[mid] 和 A[0] 的相对大小
low 和 high 的比较是在跳出循环的时候作为条件判断。
现在思考这个问题:为什么 low>high 时就找到了插入位置(为 low 所指位置)?
注:当A[mid]=A[0]时,为了保证算法的稳定性,应继续在 mid 所指位置右边寻找插入位置 !!!!
注: i<=n 是因为函数参数 n 的含义是数组有 n 个元素,因为A[0] 是空的,所以数组下标到了 n.
结构程序设计思维 !!!!!!