二分查找前提 查找的序列需要有序
十分好理解 取中间值与目标值对比查找 注意下数值边界
public static void main(String[] args)
{
int[] arr = {4, 6, 9, 12, 34, 56, 78, 89, 2345, 45678};
int[] arr2 = {4};
int[] arr3 = {};
int index = binarySearch(arr, 34);
int index2 = binarySearch(arr2, 34);
int index3 = binarySearch(arr3, 34);
System.out.printf("value in arr index " + index + "\r\n");
System.out.printf("value in arr2 index " + index2 + "\r\n");
System.out.printf("value in arr3 index " + index3 + "\r\n");
}
private static int binarySearch(int[] arr, int value)
{
if(arr == null || arr.length == 0) return -1;
return binarySearch(arr, value, 0, arr.length > 1 ? arr.length - 1 : 0); //注意一下边界
}
//迭代二分查找
private static int binarySearch(int[] arr, int value, int h, int t)
{
if(t < h) return -1; //注意一下边界
int binary = (h + t) / 2;
if(arr[binary] == value) return binary;
else if(arr[binary] > value ) return binarySearch(arr, value, h, binary - 1);
else return binarySearch(arr, value, binary + 1, t);
}
输出结果