1、非递归二分查找
// 非递归二分查找
private static int search01(int[] arr, int val){
int low = 0;
int high = arr.length-1;
int mid = (low+high)/2;
while (high >= low){
if (arr[mid] == val){
return mid;
}else if (arr[mid] > val){
high = mid - 1;
}else {
low = mid + 1;
}
mid = (low+high)/2;
}
return -1;
}
2、递归二分查找
// 递归二分查找
private static int search02(int[] arr, int low, int high, int val){
if (low > high){
return -1;
}
int mid = (low + high)/2;
if (arr[mid] == val){
return mid;
}else if (arr[mid] > val){
return search02(arr, low, mid-1, val);
}else {
return search02(arr, mid+1, high, val);
}
}
3、测试
public static void main(String[] args) {
// 非递归
int[] arr = {1, 2, 3, 4, 5, 6};
System.out.println(search01(arr, 4));
System.out.println(search01(arr, 6));
System.out.println(search01(arr, 0));
System.out.println("---------------");
// 递归
System.out.println(search02(arr, 0, 5, 4));
System.out.println(search02(arr, 0, 5, 6));
System.out.println(search02(arr, 0, 5, 0));
}
4、输出