试图实现二进制搜索算法似乎无法使其工作

时间:2017-08-27 19:27:52

标签: c++ arrays algorithm binary-search-tree

我一直在努力让这个二进制搜索算法工作,并且通过使用khan学院解释的算法示例,我仍然无法让它工作,它应该输出一个但是什么都没发生。汗学院的例子是这样的:

  
      
  1. 设min = 0且max = n-1。
  2.   
  3. 如果max< min,然后停止:目标在数组中不存在。返回-1。
  4.   
  5. 将猜测计算为max和min的平均值,向下舍入(使其为整数)。
  6.   
  7. 如果array [guess]等于target,则停止。你找到了!返回猜测。
  8.   
  9. 如果猜测太低,那就是,array [guess]<目标,然后设置min = guess + 1。
  10.   
  11. 否则,猜测太高了。设置max = guess - 1。
  12.   
  13. 返回第2步。
  14.   

我根据步骤编写的代码是:

#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;
}

2 个答案:

答案 0 :(得分:2)

二进制搜索算法陈述

  

如果L> R,搜索终止为不成功。

然而,在您的实现中,您在条件L> = R时终止搜索。在L == R的情况下,算法应该再进行一次迭代,因为它还没有考虑列表中的这个位置。

在目标值为73的情况下,当算法到达目标的位置时,20,L == R.您的实现过早地终止一步以识别目标。

答案 1 :(得分:1)

试试这个:

(max> min)到(max> = min)