* 二分法查找(迭代实现)
*/
public int query(int value, int start, int end) {
if (start > end) {
return 0;
}
if (start == end) {
return this.array[start] == value ? 1 : 0;
}
int m = (end + start) / 2;
if (this.array[m] == value) {
return 1;
} else {
if (this.array[m] > value) {
end = m;
} else {
start = m;
}
return this.query(value, start, end);
}
}
* 二分查找(非迭代)
*
* @return
*/
public boolean binaryQuery(int[] test, int target) {
int low = 0;
int high = test.length - 1;
while (low <= high) {
// 计算中间值的策略
// 1:(high + low) / 2,可能溢出
// 2: low + (high - low) / 2
// 3: high+low>>>1 (无符号右移)
int mid = high + low >>> 1;
int midValue = test[mid];
if (mid == low || mid == high) {
return midValue == target;
}
if (midValue < target) {
low = mid;
} else if (midValue > target) {
high = mid;
} else {
return true;
}
}
return false;
}