我一直在努力让这个二进制搜索算法工作,并且通过使用khan学院解释的算法示例,我仍然无法让它工作,它应该输出一个但是什么都没发生。汗学院的例子是这样的:
- 设min = 0且max = n-1。
- 如果max< min,然后停止:目标在数组中不存在。返回-1。
- 将猜测计算为max和min的平均值,向下舍入(使其为整数)。
- 如果array [guess]等于target,则停止。你找到了!返回猜测。
- 如果猜测太低,那就是,array [guess]<目标,然后设置min = guess + 1。
- 否则,猜测太高了。设置max = guess - 1。
- 返回第2步。
醇>
我根据步骤编写的代码是:
#include <iostream>
int main() {
int arr[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 };
int min = 0;
int max = 24;
int guess;
int targetValue = 73;
while (max > min) {
guess = ((max + min) / 2);
if (arr[guess] == targetValue) {
std::cout << guess;
break;
}
else if (arr[guess] < targetValue) {
min = guess + 1;
}
else {
max = guess - 1;
}
}
return 0;
}
答案 0 :(得分:2)
二进制搜索算法陈述
如果L> R,搜索终止为不成功。
然而,在您的实现中,您在条件L> = R时终止搜索。在L == R的情况下,算法应该再进行一次迭代,因为它还没有考虑列表中的这个位置。
在目标值为73的情况下,当算法到达目标的位置时,20,L == R.您的实现过早地终止一步以识别目标。
答案 1 :(得分:1)
试试这个:
(max> min)到(max> = min)