【发布时间】:2017-08-27 19:27:52
【问题描述】:
在过去的一个小时里,我一直在尝试让这个二分搜索算法工作,并通过使用可汗学院解释的算法示例,我仍然无法让它工作,它应该输出一个数字但是没发生什么事。可汗学院的例子是这样的:
- 令 min = 0 且 max = n-1。
- 如果 max
- 将猜测值计算为最大值和最小值的平均值,向下取整(使其为整数)。
- 如果 array[guess] 等于 target,则停止。你找到了!返回猜测。
- 如果guess过低,即array[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;
}
【问题讨论】:
-
就像一个注释,你应该写
std::cout << guess << std::endl,这样输出缓冲区就会被刷新。 -
将
std::cout << min << " " << max << std::endl;添加为while循环的第一行,它应该可以帮助您进行诊断。您会看到该程序现在在min=max=20处停止 -
请注意,“
max < min时停止”与“只要max > min继续”不同。 a b。 -
最简单的可能是找到成千上万的二进制搜索实现之一并将您的代码与之进行比较。更好的选择是调试您的代码。
标签: c++ arrays algorithm binary-search-tree