java二分查找分析总结
二分法应用举例 
由于此处的数组已经排好序,只要找到分界点即可,所以直接用二分法查找到第一个错误的版本即可。
二分法思路
一个集合按顺序查找某一个元素,步骤繁琐,效率不高,对已经排好序的集合,可以用二分法,快速定位到某个特定的元素。二分法将整个集合分为三部分,左边区域,中间的数,和右边区域,如果中间的数与目标相等,就停止二分,如果不相等,则进入对应的区域继续二分,直到查找到对应的元素为止。
算法 --以二分法实现上面的实例
- 步骤
- 1:参数初始化
- left:目标区域左边界索引
- right:目标区域右边界索引
- mid:区域中点
- 2:二分迭代
- 判断迭代是否应该结束,即区域内只有一个元素或者没有元素,left>right
- 计算mid
- 判断mid与所需元素的关系
- 选择左右两个区域作为下次迭代的目标区域,更新right或者left的值就可以得到此番效果。
- 3:返回目标索引
- 返回left(或right)(此处元素一定在集合中,最后right == left, 若需要查找的元素并不在集合之中,最后left>right)
- 1:参数初始化
代码如下:
publiv int firstBadVersion(int n){
int left = 1;
int right = n;
int mid = 0;
while(left < right){
mid = left + (right - left)/2; // 防止整数溢出, 不能写成(left+right)/2
if(isBadVersion(mid)){
right = mid;
}else{
left = mid+1;
}
}
return left;
}