数组中使用二分法查找数值。
举例:给定一个有序数组和一个数值,通过二分法查找出数值在数组中所处位置,如果找不到,返回-1;找到了,返回数组下标。
二分查找:我们每次都找出数组的中间值和给定数值比较大小,在没有找出来之前,数组左边的下标一定是小于右边的下标的。
public static int binarySearch(int []arr,int m){
int left =0;
int right=arr.length-1;
while(left<=right){
int mid=(left+right)/2;
if(arr[mid]==m){
return mid;
}
else if(arr[mid]>m){
right=mid-1;
} else{
left=mid+1;
}
}
return -1;
}
采用递归方法实现:
public static int binarySearch(int [] arr,int m,int left,int right){
while(left<=right){
int mid=(left+right)/2;
if(arr[mid]==m){
return mid;
} else if(arr[mid]>m){
return binarySearch(int []arr,m,left,mid-1)
} else{
return binarySearch(int[]arr,m,mid+1,right)
}
} return -1;
}