2D阵列3中的二进制搜索
Binary Search in 2D Array 3
我需要在2D数组中找到一个数字。对列进行排序(从最小值到最大值)。
这是我的代码:
const int SIZE = 4;
const int NOT_FOUND = 1;
int binarySearch(int mat[][SIZE], int &line , int num);
void main()
{
int num, index, mat[SIZE][SIZE] = { 11,1,5,11,
11,6,7,2,
8,7,7,7,
0,12,9,10 };
int line = sizeof(mat) / sizeof(mat[0][0]);
cout << "please type a number to search: " << endl;
cin >> num;
index = binarySearch(mat, line, num);
if (index == NOT_FOUND) {
cout << "The value: " << num << "doesn't exist in the arrayn";
}
else {
cout << "The value: " << num << " exists in line " << line+1
<<" and column: " << index+1 << endl;
}
system("pause");
}
int binarySearch(int mat[][SIZE], int &line, int num)
{
for (int j = 0; j < SIZE; j++)
{
int low = 0;
int high = SIZE - 1;
int middle;
while (low <= high)
{
middle = (low + high) / 2;
if (num == mat[middle][j])
{
line = middle;
return j;
}
else if (num < mat[middle][j]) {
high = middle - 1;
{
else {
low = middle + 1;
}
}
}
return NOT_FOUND;
}
程序找不到数组中的所有数字。有些东西不起作用。
问题出在哪里?
您的binarySearch
不会遍历所有数字,它会检查第一个数字,因此在您的情况下11,它会移动到下一个数字,但它会跳过整行数字(1,5,11)和第二行的第一个数字然后移动到第二行中的下一个第二个数字,即6。
由于您有一个数字矩阵,它由行和列组成,这意味着您必须创建两个循环for(...)
,一个用于行,另一个用于列,这样您就可以遍历2D阵列中的所有数字。
我建议在binarySearch
函数上设置一个断点,并完成它,这将对您有很大帮助。
我在您的代码中看到的一些错误是::
1) 看起来您正在对输入数组中的每一列应用二进制搜索,如果在相应的列中找不到数字,则递增j
并移动到下一列。二进制搜索最重要的一点是"搜索的数组应始终排序"。既然你在这里搜索列,那么你所有的列都应该被排序!上面的代码中未排序!这就是为什么你找不到大多数元素的主要原因。所以,你的输入数组应该是这样的(如果你想应用二进制搜索)::
int mat[SIZE][SIZE] = { 0,1,5,2,
8,6,7,7,
11,7,7,10,
11,12,9,11 }
此处所有列按升序排序!
2) 变量NOT_FOUND
的值,您已将其设置为1
,并从函数中返回找到元素的列编号。因此,如果您在列1
的2D数组中找到元素,您的程序将打印Element Not Found
,因为如果元素在列1
中找到,则条件if (index == NOT_FOUND)
计算为true
。因此,更好的解决方案是将NOT_FOUND
的值更改为某个负值,因为在有效的情况下,它永远不可能是列号。类似以下内容::
const int NOT_FOUND = -1;
Ideone代码链接:http://ideone.com/9cwHnY
- 有根的二进制搜索树.保留与其父级的链接
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 正在尝试重载二进制搜索树分配运算符
- 我的二进制搜索程序只是关闭了
- 二进制搜索的终止点
- 递归二进制搜索与字符串数组
- 测试树是否为二进制搜索树
- 如何二进制搜索结构向量并在适当的索引处插入
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 字符串的递归二进制搜索-C++
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 二进制搜索树没有匹配的函数调用
- 二进制搜索不适用于特定输出
- 如何在向量上进行二进制搜索以找到具有特定id的元素
- 二进制搜索树不变的标头文件
- 二进制搜索树插入带参数参考
- 二进制搜索不变以查找元素的首次出现
- 了解一种神秘地起作用的递归二进制搜索算法