二分查找法:
通过将查找元素与数组中间位置元素作比较,确定查找元素分布在数组左部分还是右部分,每次比较都能缩小一半(二分之一)范围,最终找到查找元素所在位置。
二分查找前提:有序数组
非递归方式实现二分查找
/**
* 非递归方式实现二分查找
*/
public static int binarySearch(int[] arr, int key){
//定义下标
int start = 0;
int end = arr.length-1;
while(start <= end){
int middle = (start+end)/2;
if(arr[middle] > key){
end = middle-1;
}else if(arr[middle] < key){
start = middle+1;
}else {
return middle;
}
}
return -1;
}
递归方式实现二分查找
/**
* 递归方式实现二分查找
*/
public static int binarySearch(int[] arr, int key, int start, int end){
if(start > end || key < arr[start] || key > arr[end]){
return -1;
}
int middle = (start+end)/2;
if(arr[middle] > key){
return binarySearch(arr,key,start,middle-1);
}else if(arr[middle] <key){
return binarySearch(arr,key,middle+1,end);
}else {
return middle;
}
}