【发布时间】:2016-11-23 20:11:10
【问题描述】:
我正在尝试使用while 循环实现二进制搜索。当我正在寻找的int 在数组中时,它似乎有效;但是,当我正在搜索的 int 不存在时,程序似乎卡在循环中,而没有返回 false。我一直在使用gdb,但我似乎仍然无法找出错误。如您所见,我可能添加了一堆额外的 if 语句等,试图解决这个问题。
bool search(int value, int values[], int n) {
sort(values, n);
int begin = 0;
int end = (n - 1);
if (n < 1) {
return false;
}
while (end > begin + 1) {
int center = ((begin + end) / 2);
if (values[0] == value) {
return true;
}
if (begin == value) {
return true;
}
if (end == value) {
return true;
}
if (end == (begin + 1) || end == begin) {
if (end == value || begin == value) {
return true;
} else {
return false;
}
}
if ((values[center]) == value) {
return true;
} else
if ((values[center]) > value) {
end = center;
} else
if ((values[center]) < value) {
begin = center;
} else {
return false;
}
}
// TODO: implement a searching algorithm
return false;
}
【问题讨论】:
-
begin和end是索引,为什么要与value比较? -
SO 上有很多可用的二分搜索算法(肯定有,其中相当一部分也与 CS50 相关)。您应该查看其中的一些,以发现您的代码过于复杂且不正确。例如,First and last occurrence for binary search in C 中有一些有用的代码,它处理了一些比您需要的更复杂的情况,但也包含您需要的代码。你也可以看看if statement not recognizing true conditions。
-
@aknys:您可以通过单击分数下方的灰色复选标记来接受其中一个答案。