二分查找一般分为两种,一种是循环实现的,另一种就是递归实现。
二分查找就是将中间值和目标值进行比较,一次去掉一半,可以说是最简单的分治。
那怎么找中间值呢?
一般中间值就是:
int mid = (low + high) / 2;
但是这样效率较低,可以用移位计算:
int mid = low + ((high - low) >> 1);
注意:移位运算符的优先级比加减法低。
循环的代码就是:
public static int binarySearch(int[] array,int low,int high,int target){
while(low <= high){
int mid = low + ((high - low) >> 1);
if(array[mid] == target)
return mid;
else if(array[mid] > target) //目标值在中间值的左边
high = mid - 1;
else //目标值在中间值的右边
low = mid + 1;
}
return -1;
}
递归的代码:
public static int binarySearch(int[] array,int low,int high,int target){
while(low <= high){
int mid = low + ((high - low) >> 1);
if(array[mid] == target)
return mid;
else if(array[mid] > target)
return binarySearch(array,low,mid - 1,target);
else
return binarySearch(array,mid + 1,high,target);
}
return -1;
}