1.考察要点
1.二分搜索不仅在有序序列中可以运用,无序序列也同样适用,只要满足每次查找都会缩小一半查找范围。
2.注意循环初始条件,边界值,划分点的处理,确保循环不会无法终止。
3.划分点的经典写法:(p+r)/2 ,安全写法:r-(r-p)/2或p+(r-p)/2
2.局部最小值问题
局部最小值:在一个无序序列中,且任意两个相邻元素都不相等的情况下,满足arr[i]<arr[i+1]且arr[i]<arr[i-1]的元素arr[i]称为局部最小值。
查找方法:
1.arr为空或长度为1时返回。
2.判断两端点的情况
如果端点值中有一个端点是局部最小值,则立即返回。
3.端点两边都不是局部最小,如下,讨论中间点mid。
4.中间点的情况
1.当属于情况2时,直接返回mid.
2.否则,如3的两边,4的左边,比存在局部最小值,因为相邻元素不同,以4的左边为例,
在mid的左边,一旦出现上升点,则此点局部最小,否则若一直向左降序,则arr[1]为局部最小值。
3.未画出的情况5参考情况4。