尝试实现二叉搜索算法,似乎无法使其工作
Trying to implement the Binary Search algorithm, can't seem to get it to work
在过去的一个小时里,我一直在尝试让这个二叉搜索算法工作,通过使用可汗学院解释的算法示例,我仍然无法让它工作,它应该输出一个数字,但没有任何反应。可汗学院的例子是这样的:
- 设最小值 = 0,最大值 = n-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;
}
二叉搜索算法状态
如果 L> R,则搜索将终止为不成功。
但是,在实现中,您将在条件 L>= R 上终止搜索。在 L == R 的情况下,算法应该再做一次迭代,因为它还没有考虑列表中的这个位置。
在目标值 73 的情况下,当算法到达目标的位置 20 时,L == R。您的实现过早终止一步,无法识别目标。
试试这个:
(最大> 分钟)至(最大>= 最小值)
相关文章:
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 实现 DFS 在较短的输入下工作正常,但在较大的输入下会抛出分段错误
- nth_element基于修改后的quick_sort实现,无法按预期工作
- 这个数组交集的实现是如何工作的
- 查找表究竟是如何工作的,以及如何实现它们
- 只有第一个缓冲区可以在C++中实现的Double缓冲区中工作
- 尝试实现二叉搜索算法,似乎无法使其工作
- popen() 如何工作以及如何在 Linux 上实现它到 C++ 代码中
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- 在 gcc 上自己的元组实现段错误,同时在 clang 中工作
- 运算符 [] 函数的实现是如何工作的
- 如何以相同的方法在子类中超载的相同方法来实现工作变量参数方法
- 实现快速排序,几乎可以工作但不能
- 在Graph实现中,对和向量是如何工作的
- 在C 中实现此类工作流程的最佳方法
- 这种珠子排序算法的 c++ 实现是如何工作的
- 有可能实现一个与数组而不是单个对象一起工作的内存池吗
- 我正试图在我的SFML Platformer中实现双跳,但它并没有按预期的方式工作
- C++,当每个工作线程都必须执行几个不同的任务时,如何为任务实现线程池
- 解释在opencv中实现的阴影检测代码的工作原理