二分思想
1. 二分的前置条件
- 存储在数组中
- 有序排列
2. 二分的思想
对于数组 [low] -> [high], 取 [mid] 位置数与需要查找的X进行比较;
如果X 较小,则在[low] -> [mid] 段继续查找;
否则在 [mid] -> [high]段查找,依次递归。
递归的出口:查到X或 mid = low / mid = high.
需要注意的问题
1. [mid] 取值问题
mid = (low + high) / 2 ; // bad
mid = (high - low) >> 1 + low ; // good
在计算机中,移位操作是比较快的。 >>
右移,相当于除法,二进制右移1位相当于除以2,右移2位相当于除以4, <<
左移,相当于乘法。
而 (low + high) / 2 需要考虑可能会存在溢出问题。