方法一:while循环
public class BinarySearch {
public static int rank(int key, int[] a){
int lo = 0;
int hi = a.length - 1;
while( lo <= hi){
int mid = lo + (hi - lo) / 2;
if (key < a[mid]) {
hi = mid - 1;
}else if(key > a[mid]){
lo = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
方法二:递归
public static int recursionBinarySearch(int[] arr,int key,int low,int high){
if(key < arr[low] || key > arr[high] || low > high){
return -1;
}
int middle = (low + high) / 2; //初始中间位置
if(arr[middle] > key){
//比关键字大则关键字在左区域
return recursionBinarySearch(arr, key, low, middle - 1);
}else if(arr[middle] < key){
//比关键字小则关键字在右区域
return recursionBinarySearch(arr, key, middle + 1, high);
}else {
return middle;
}
}