二叉搜索陷入无限循环
Binary search stuck infinite loop?
我创建了这个二进制搜索,但似乎每次都陷入循环。它检查的只是一个向量。我坚持我需要改变什么,我已经尝试了很多不同的事情。
[1,2,4,6] 如果我搜索 4 从未找到它,它会一直命中低 = 中 + 1。
bool SortSearch::binarySearcher(int size, int val)
{
int lower = 0, upper = size - 1, mid;
while (lower < upper)
{
mid = (lower + (upper-lower))/2;
if (students[mid].getID() > val)
upper = mid - 1;
else if (students[mid].getID() < val)
lower = mid + 1;
else if (students[mid].getID() == val)
return true;
else
return false;
}
}
我相信:
mid = (lower + (upper-lower))/2;
应该是:
mid = lower + (upper-lower)/2;
我可能会补充:
assert(lower <= mid && mid <= upper);
此外,还有:
return false;
应该在循环之后。 一旦你检查了<
,并>
,剩下的唯一可能的结果是==
(带有ints(,这样最终的else
子句永远不会命中。 (如果您使用浮点类型作为索引,那么您可能会遇到一些奇怪的情况,包括 NaN、无穷大,也许还有负零。
调高编译器上的警告级别。 它应该警告您无法访问的代码和没有返回的路径。
这个:
mid = (lower + (upper-lower))/2;
应该是:
mid = lower + (upper-lower) / 2;
或者只是平均值:
mid = (upper + lower) / 2;
在每次迭代中打印 lower
、 upper
和 mid
的值可能会很有启发性。考虑当lower
和upper
仅相差 1 时会发生什么 - 然后mid
将被计算为等于 lower
,这意味着在下一次迭代中,lower
和 upper
将与上一次迭代相同,从而导致无限循环条件。
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 连接线程时的无限循环
- 为什么这种方法会进入无限循环?
- 广度优先搜索陷入无限循环
- 二叉搜索陷入无限循环
- C++中的二进制搜索函数返回无限循环
- 在g++上执行二进制搜索树进入无限循环