我试图使用while
循环实现二分搜索。它似乎工作时,我正在寻找int
是在阵列中;但是,当我搜索的int
不存在时,该程序似乎卡在循环中,没有返回false。我一直在使用gdb,但我仍然无法弄清楚这个bug。正如你所看到的,我可能会添加一些额外的if语句等,试图弄清楚这一点。在cs50中陷入while循环pset3二进制搜索
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'比较它们? – Barmar
在SO上有很多可用的二进制搜索算法(这里肯定会有,并且它们中的相当一部分也会与CS50相关)。你应该看看其中的一些,看看你的代码是非常复杂和不正确的。例如,[C中的二进制搜索的首次和最后一次出现]中有有用的代码(http://stackoverflow.com/questions/35147784/),它处理比您需要的一些更复杂的情况,但也包含代码你需要。你可以看看[如果语句不能识别真实条件](http://stackoverflow.com/questions/38468878/)。 –
@aknys:您可以通过点击其分数下方的灰色复选标记来接受其中一个答案。 – chqrlie