二分查找
1. 上下限目的是保证能遍历数组的全部元素,因此上下限的初始值取的是数组的下标而非数组的length
2. while循环的条件是 upper 不小于 lower
3. 当前下标命名一开始自己起的是posi,根据其赋值 (lower+upper)/2 ,命名mid还是挺恰当
// 0 1 2 3 4 5 6 7 8 9 10
int[] arr = {1,2,4,5,7,10,12,15,16,18,31};
System.out.println(binFind(arr, 5));
}
static int binFind(int[] arr, int target) throws InterruptedException{
int lower = 0;
int upper = arr.length - 1;
while(upper >= lower){
int mid = (lower + upper)/2;
if(arr[mid] > target){
upper = mid - 1;
}else if(arr[mid] < target){
lower = mid + 1;
}else{
return mid;
}
}
return -1;
}
}

浙公网安备 33010602011771号