二分查找条件:
必须是有序的
二分查找思路:
1 确定该数组的中间下标 mid = (left + right)/2
2 让需要查找的数findVal 和 arr[mid] 比较
findVal > arr[mid],说明你要查找的数在mid的右边,因此需要递归的向右查找
findVal < arr[mid],说明你要查找的数在mid的左边,因此需要递归的向左查找
findVal == arr[mid],说明找到,就返回
3 结束递归
找到就结束递归
递归完整个数组,仍然没有找到findVal,也需要结束递归,当left > right就需要退出
代码
public class Binary {
public static int binarySearch(int[] arr,int left,int right,int findVal){
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;
}
}
public static void main(String[] args) {
int arr[] = {1,3,5,7,8,44,665};
int mid = binarySearch(arr,0,arr.length-1,44);
System.out.println(mid);
}
}