二分查找及其递归形式
- 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
思路
- 查找value=2 ,mid=(high+low)/2
- high=mid-1 , 新mid=(high+low)/2
- low=mid+1 , 新mid=(high+low)/2
- low==high , return mid
二分查找的非递归形式
//TODO:二分查找的非递归形式
public static int binarySearchF(int[]arr,int value){
int low=0;
int high=arr.length-1;
int mid ;
while(true) {
if(low>high){
return -1;
}
mid = (low+high)/2;
if (value == arr[mid]) {
return mid;
} else if (value < arr[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
二分查找的递归形式
//TODO:二分查找的递归形式
public static int binarySearch(int[]arr,int low,int high,int value){
if(low>high){
return -1; // 查无此值时返回 -1
}
int mid = (low+high)/2;
if (value==arr[mid]){
return mid;
}else if (value<arr[mid]){
high=mid-1;
return binarySearch(arr,low,high,value);
}else {
low=mid+1;
return binarySearch(arr,low,high,value);
}
}
测试
public static void main (String[] args){
int[] arr=new int[]{1,15,19,22,35,39,45,66};
System.out.println(binarySearchF(arr,39)); //二分查找 非递归形式 结果:5
System.out.println(binarySearch(arr,0,7,15)); //二分查找 递归形式 结果:1
}