思路:
在有序数组中,找到数组中间位置数据和目标数据比较,大于目标数据,在左边继续递归,小于目标数据在右边继续递归
二分查找时间复杂度O(log n),每次过滤一半数据,注意大数溢出情况
理解二分查找对理解树的遍历很有帮助
代码:
public class BinarySerach {
private static int binarySerach(int arr[], int target) {
int low = 0;
int high = arr.length - 1;
int mid;
if(arr == null || arr.length == 0) {
return -1;
}
while (low <= high) { //注意这里等于不可少,最后中间值也是需要比较的
//mid = (high + low) / 2; //大数相加会溢出
mid = low + (high - low) / 2;
if(arr[mid] < target) {
low = mid + 1;
} else if(arr[mid] > target) {
high = mid - 1;
} else {
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int arr[] = new int[]{1, 5, 17, 18, 23};
System.out.println(binarySerach(arr, 18));
}
}