因为我们初始化 right = nums.length - 1
所以决定了我们的「搜索区间」是 [left, right]
所以决定了 while (left <= right)
同时也决定了 left = mid+1 和 right = mid-1
因为我们只需找到一个 target 的索引即可
所以当 nums[mid] == target 时可以立即返回
/**
* 二分查找
*/
public class erFen {
private static final String TAG = "erFen";
public static void main(String[] args){
int[] array = new int[100];
for(int i=0; i<100;i++){
array[i] = i;
}
System.out.println(binarySearch(array, 31));
}
private static int binarySearch(int[] array, int target){
int start=0;//最小下标
int end=array.length-1;//最大下标
int mid;//中间下标
while (start<=end){
// mid=start+(end-start)/2;
mid=(end+start)/2; //折半下标
if (target>array[mid]){//关键字比折半值大,则最小下标调成折半下标的下一位
start=mid+1;
}else if (target<array[mid]){//关键字比折半值小,则最大下标调成折半下标的前一位
end=mid-1;
}else {
return mid;
}
}
return -1;
}
}