递归式:
/**
* 递归式二分查找实现
* @param arr
* @param left
* @param right
* @param value
* @return
*/
public static int binarySearch1(int[] arr, int left, int right, int value){
if (left > right) return -1;
int mid = (left + right) >> 1;
int midVal = arr[mid];
if (midVal > value) {
return binarySearch1(arr,0,mid-1,value);
}else if (midVal < value){
return binarySearch1(arr,mid + 1,right,value);
}else if (midVal == value){
return mid;
}
return -1;
}
非递归式:
/**
* 非递归式二分查找实现
* @param arr
* @param target
* @return
*/
public static int binarySearch2(int[] arr, int target){
int left = 0;
int right = arr.length - 1;
while (left <= right){//条件满足继续查找
int mid = (left + right) >> 1;
if (arr[mid] == target){
return mid;
}else if (arr[mid] > target){
right = mid - 1;//需要向左查找,调整right
}else if (arr[mid] < target){
left = mid + 1;//需要向右查找,调整left
}
}
return -1;
}