【发布时间】:2020-10-22 13:52:48
【问题描述】:
我正在尝试跟踪此二进制搜索代码中的键比较次数。对于2^16 的数组大小,比较结果应该在 17 左右。你能解释一下为什么我会变成 33 岁吗?
public class AdvancedBinarySearch {
int count = 0;
// Returns location of key, or -1 if not found
int AdvancedBinarySearch(int arr[], int l, int r, int x) {
int m;
while (r - l > 1) {
count++;
m = l + (r - l) / 2;
if (arr[m] <= x) {
l = m;
count++;
} else {
r = m;
count++;
}
}
if (arr[l] == x) {
count++;
return l;
}
if (arr[r] == x) {
count++;
return r;
} else {
count++;
return -1;
}
}
public void setCount(int i) {
this.count = i;
}
}
【问题讨论】:
-
您能否提供一个示例程序来运行它并重现该数字?
-
您在
while循环中的比较之前 和之后 都碰到了count。因此,您的结果大约是您预期的两倍也就不足为奇了。
标签: java binary-search bug-tracking