为什么二进制搜索不适用于我的测试?

问题描述 投票:0回答:1

我刚刚使用数组在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;
}

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

c++ algorithm search binary-search
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.