下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
值 | 3 | 14 | 27 | 31 | 39 | 42 | 55 | 70 | 74 | 81 | 85 | 93 | 98 |
迭代1 | l | m | r | ||||||||||
迭代2 | l | m | r | ||||||||||
迭代3 | l,m | r |
public void BinarySearch(int target, int[] array) {
// 找到下标最小
int l = 0;
// 找到下标最大
int r = array.length - 1;
// 为什么要有等于呢,因为有可能查找键有可能在第一个位置或最后一个位置,这时l=r
while (l <= r) {
// 向上取整和向下取整都没有关系,所有的值都可被访问
int m = (int) Math.floor((l + r) / 2);
if (target == array[m]) {
System.out.println("已查找到,下标为" + m);
break;
} else if (target < array[m]) {
// 用m-1是因为m已经验证过了,没有必要在此验证
r = m - 1;
} else {
// 这里同理
l = m + 1;
}
}
}