二进制搜索返回错误

时间:2015-10-02 05:37:05

标签: c

此代码有效,但最后返回false。为什么不适当地返回错误?

我知道情况就是这样,因为代码是更大程序的一部分,并且应该说"没有找到针头#34;当返回false时。但是,我没有看到这个消息。

/**
 * Returns true if value is in array of n values, else false.
 */
int lower = 0;

bool search(int value, int values[], int n) {
    int higher = n;

    if (n < 0) {
        return false;
    }

    while (lower <= higher) {
        int middle = (lower + higher) / 2;
        if (values[middle] == value) {
            return true;
        } else if (values[middle] < value) {
            lower = middle + 1;
        } else if (values[middle] > value) {
            lower = middle - 1;
        }
    }
    return false;
}

1 个答案:

答案 0 :(得分:2)

你有一个逻辑错误。

  else if(values[middle]>value)
  {
     lower=middle-1;
  }

应该是:

  else if(values[middle]>value)
  {
     higher=middle-1;
  }

更好的是,你可以使用:

  else
  {
     higher=middle-1;
  }

由于之前ifelse-if处理其他两个案例。