【发布时间】: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