BinarySearch二分查找

二分思想


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 需要考虑可能会存在溢出问题

2. 存在重复元素时,查找第一次或最后一次出现的位置

你可能感兴趣的:(BinarySearch二分查找)