为什么二进制搜索在我的测试中不起作用
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
的指针。没有关于它是否指向int数组的信息,或者元素的数量可能是这样一个数组的一部分。因此sizeof(arr)
将是指针的大小(通常为4或8(。
您需要将数组中包含的元素数传递给bSearch
,或者使用一个跟踪大小的标准容器(std::vector
或std::array
(。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 为什么二进制搜索在我的测试中不起作用
- MS 本机单元测试 - 断言::线程失败不起作用
- 尝试使用C++中的模板进行BST排序,但在使用随机字符串进行测试时不起作用
- C++20 概念测试在 MSVS 16.5 中不起作用
- 使用constexpr布尔测试的enable_if不起作用
- Visual Studio 2017 C 本地单元测试框架不起作用
- 深度测试根本不起作用
- CMAKE Boost 单元测试框架在 Mac 上不起作用
- OpenGL 深度测试不起作用
- 多态性测试不起作用
- 将 XCTest 单元测试添加到现有应用不起作用
- 为什么谷歌测试ASSERT_FALSE在方法中不起作用,而EXPECT_FALSE却起作用
- VS2012:单元测试错误:断言::AreEqual(对象,对象)不起作用
- VS 2013 单元测试不起作用 =设置执行上下文时出现>错误
- 为什么这个特性类不起作用,来测试一个类是否有某个typedef