当我们没有了解二分查找法的时候,我们面对在有序数组查找元素只能从索引0开始一个一个慢慢的遍历,这样子时间复杂度会很高,所以我们需要学习二分查找法,让我们的代码更加高效。
public int binarySearch(int[] arr,int target) {
int l = 0, r = arr.length - 1;
while (l <= r) {
//之所以不使用(l + r)/2,是因为当l和r都很大的时候会超出int的范围
int mid = l + ((r - l) >> 1);
if(arr[mid] == target){
return mid;
}else if(arr[mid] > target){
r = mid - 1;
}else {
l = mid + 1;
}
}
return -1;
}
除了上述的循环法,还有迭代法,不过都是大同小异。代码如下:
public int binarySearch(int[] arr,int l,int r,int target) {
while (l <= r) {
int mid = l + ((r - l) >> 1);
if(arr[mid] == target){
return mid;
}else if(arr[mid] > target){
return binarySearch(arr,l,mid - 1,target);
}else {
return binarySearch(arr,mid + 1,r,target);
}
}
return -1;
}