![]()
public static void main(String[] args) {
// 数组中的元素必须是, 从小到大排序,
int[] arr = {10, 20, 30, 40, 50, 60, 70, 80, 90};
int target = 55;
System.out.println(binarySearch(arr, target));
}
/**
* 此方法用于二分查找
* @param arr 数组
* @param target 要找的目标值
* @return 目标值所在的索引, 如果不存在返回-1
*/
public static int binarySearch(int[] arr, int target) {
// 开始索引
int startIndex = 0;
// 结束索引
int endIndex = arr.length - 1;
// 循环: 只要没找到, 还有希望存在, 就继续找
// 结束索引 >= 开始索引
while (endIndex >= startIndex) {
// 计算中间索引
int middleIndex = (startIndex + endIndex) / 2;
// 比较
if (arr[middleIndex] > target) {
// 修改结束索引
endIndex = middleIndex - 1;
} else if (arr[middleIndex] < target) {
// 修改开始索引
startIndex = middleIndex + 1;
} else {
return middleIndex;
}
}
// 如果循环结束, 说明循环判断的结果为false
// 说明结束索引已经大于开始索引 => 找不到(target不存在)
return -1;
}