二分法查找的对象要求是一个有序队列,每次将查找值与中间的元素做对比,如果查找值大于中间元素,说明查找值在中间元素右侧,则更新head,如果查找值小于中间元素,说明查找值在中间元素左侧,则更新end,如此反复,直到寻找到目标值为止。
Java代码实现:
package com.atguigu.java;
public class FindFunction {
public static void main(String[] args) {
FindFunction ff = new FindFunction();
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
int dest = 5;
int index = ff.binaryTest(arr, dest);
if (index > 0) {
System.out.println("目标值存在于数组中,位置在:" + index);
} else {
System.out.println("目标值不存在于数组中");
}
}
public int binaryTest(int[] arr, int dest) {
int head = 0;
int end = arr.length - 1;
int middle;
while (head <= end) {
middle = (head + end) / 2;
if (arr[middle] == dest) {
return middle;
} else if (arr[middle] < dest) {
head = middle + 1;
} else if (arr[middle] > dest) {
end = middle - 1;
}
}
return -1;
}
}
查询结果如下: