描述
- 一个有序数组中记录数组开始与结束位置
- 每次取中间值(开始位置 + 结束位置)/ 2 索引的值 与查找目标值进行比较
- 如果目标值小于 中间值(将结束位置索引替换为中间值位置索引),则在中间值左侧区间内继续查找
- 如果目标值大于 中间值(将开始位置索引替换成(中间值 + 1)位置的索引),则在中间值右侧区间内继续查找
- 如果 中间值 等于 目标值,则直接返回
- 如果没有找到,则返回-1
实现
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9};
int i = SortMain.binarySearch(arr, 10);
System.out.println(i);
}
/**
* 二分搜索
*
* @return
*/
private static int binarySearch(int[] arr, int target) {
// 遍历当前数组
for (int i = 1; i < arr.length; i++) {
int start = 0;
int end = arr.length;
while (start < end) {
// 除二
int mind = (start + end) >> 1;
// 目标在左侧区间,则将end重新赋值
if (target < arr[mind]) {
end = mind;
}
// 目标在右侧区间,将start赋值为 mind + 1
else if (target > arr[mind]) {
start = mind + 1;
}
// 命中目标 直接返回
else {
return mind;
}
}
}
// 没有找到
return -1;
}