【问题标题】:Why binary search is not working on my test?为什么二进制搜索不适用于我的测试?
【发布时间】:2020-06-06 21:32:06
【问题描述】:

我刚刚使用数组在 c++ 上编写了二进制搜索,但它不适用于我的所有测试。

#include <iostream>
using namespace std;

int bSearch(int arr[], int item);

int main() {
    int testArr[] = {1, 3, 5, 7, 9, 10, 12, 13, 15, 16, 18, 20};
    int result = bSearch(testArr, 18);
    cout << "The result of binary search is " << result << endl;
    return 0;
}

int bSearch(int arr[], int item) {
    int start = 0;
    int middle(0), guess(0);
    int finish = sizeof(arr);

    while(start <= finish) {
        middle = (start + finish) / 2;
        guess = arr[middle];

        if(guess == item)
            return middle;
        else if(guess > item)
            finish = middle - 1;
        else
            start = middle + 1;
    }

    return -1;
}

你能解释一下,为什么会这样?

【问题讨论】:

  • 请添加一些关于什么不起作用的信息。最好向我们展示您的结果。
  • 什么测试失败了?
  • sizeof 返回数组中元素的大小(以字节为单位),而不是数组中元素的数量。
  • @PabloJeken 这个测试的结果是-1(我们试图找到等于18的元素,数组中有18个,但是搜索的结果是位置-1)。
  • @WillemVanOnsem 非常感谢,我会尝试使用另一种方法来获取数组的大小。

标签: c++ algorithm search binary-search


【解决方案1】:

bSearch 中,参数arr 不是数组,而是指向int 的指针。没有关于它是否指向整数数组或元素数可能是此类数组的一部分的信息。所以sizeof(arr) 将是指针的大小(通常为 4 或 8)。

您需要将数组包含的元素数量传递给bSearch,或使用跟踪大小的标准容器之一(std::vectorstd::array)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2018-06-28
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多