尝试实现二叉搜索算法,似乎无法使其工作

Trying to implement the Binary Search algorithm, can't seem to get it to work

本文关键字:工作 实现 搜索算法      更新时间:2023-10-16

在过去的一个小时里,我一直在尝试让这个二叉搜索算法工作,通过使用可汗学院解释的算法示例,我仍然无法让它工作,它应该输出一个数字,但没有任何反应。可汗学院的例子是这样的:

  1. 设最小值 = 0,最大值 = n-1。
  2. 如果最大值为
  3. 将猜测计算为最大值和最小值的平均值,向下舍入(因此它是一个整数)。
  4. 如果数组[猜测]等于目标,则停止。你找到了!返回猜测。
  5. 如果猜测太低,即数组[猜测]
  6. 否则,猜测太高了。设置最大值 = 猜测 - 1。
  7. 返回到步骤 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。您的实现过早终止一步,无法识别目标。

试试这个:

(最大> 分钟)至(最大>= 最小值)