//二分查找,递归
public static int binarySearch(int[]arr,int left,int right,int findVal){
//当left>right时,说明递归完整个数组,仍然没有找到目标数
if(left>right){
return -1;
}
int mid = (left+right)/2;
int midVal = arr[mid];
if(findVal >midVal){
//向右递归
return binarySearch(arr,mid+1,right,findVal);
}else if(findVal<midVal){
//向左递归
return binarySearch(arr,left,mid-1,findVal);
}else{
return mid;
}
}
//二分查找,非递归方式,迭代
private int binarySearch(int[]nums,int target){
int start = 0;
int end = nums.length - 1;
while(start<=end){
int mid = (start + end) >>>1;
if(nums[mid]==target){
return mid;
}else if(nums[mid]<target){
//向右迭代
start = mid +1;
}eles{
//向左迭代
end = mid -1;
}
}
return -1;
}
需要注意的是引申到二维数组的二分查找时,递归中传入的right=nums[i].length。