我一直在尝试过去的一小时,以获得此二进制搜索算法的工作,并通过使用可汗学院解释算法的一个例子,我仍然无法工作,它应该输出一个数字,但没有任何反应。上汗学院的示例是这样的:试图实现二进制搜索算法,似乎无法使其工作
- 让分钟= 0和max = n-1个。
- 如果最大值为<分钟,则停止:目标不在阵列中。返回-1。
- 计算最大值和最小值的平均值,向下舍入(使其为整数)。
- 如果array [guess]等于target,则停止。你找到了!返回猜测。
- 如果猜测值太低,就是数组[猜测] <的目标,那么设置min = guess + 1.
- 否则,猜测值太高。设置最大=猜测 - 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 ::法院<<猜<<的std :: endl',以便输出缓冲区被刷新。 – ypnos
@ypnos指出,谢谢。 – JAin
将'std :: cout << min <<“”<< max << std :: endl;'作为'while循环的第一行并且它会帮助你诊断..你会看到这个程序现在暂停在最小=最大= 20处' – quetzalcoatl