为什么二进制搜索在我的测试中不起作用?
Why binary search is not working on my test?
我刚刚使用数组在 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;
}
你能解释一下吗,为什么会这样?
在bSearch
中,参数arr
不是一个数组,而是一个指向int
的指针。没有关于它是否指向一个整数数组或元素数量可能是这样的一部分的信息 array.so sizeof(arr)
将是指针的大小(通常为 4 或 8)。
您需要将数组包含的元素数量传递给 bSearch
,或使用跟踪大小的标准容器之一(std::vector
或 std::array
)。
我刚刚使用数组在 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;
}
你能解释一下吗,为什么会这样?
在bSearch
中,参数arr
不是一个数组,而是一个指向int
的指针。没有关于它是否指向一个整数数组或元素数量可能是这样的一部分的信息 array.so sizeof(arr)
将是指针的大小(通常为 4 或 8)。
您需要将数组包含的元素数量传递给 bSearch
,或使用跟踪大小的标准容器之一(std::vector
或 std::array
)。