是一个查找算法,查找目标集合必须是已经排好序的(有序的),必须知道升序还是降序。
1)查找数组中间的元素
2)与目标元素进行对比
3)相等:目标元素找到
4)中间元素大于目标元素:升序,在前半部分;降序,在后半部分
5)中间元素小于目标元素:升序,在后半部分;降序,在前半部分
6)将范围缩小,再执行二分查找算法,直到元素找到,数组已经没有元素
//二分查找算法
public class Demo12 {
public static void main(String[] args) {
int[] arr = {2,4,6,7,8,12,15,17,19,20,51} ;
int index = binarySearch(arr,20,0,11);
System.out.println(index);
}
/*
arr:目标数组
target:目标元素
return:元素的下标
*/
public static int binarySearch(int[] arr,int target,int start,int end){
//如果数组已经缩小成0个元素
if (start >= end){
return -1;
}
int middle = (end + start)/2;
//比较
if (arr[middle] == target){
//找到了
return middle;
}else if (arr[middle] >target){
//在前半部分
return binarySearch(arr,target,start,middle);
}else {
return binarySearch(arr,target,middle+1,end);
}
}
}