我試圖使用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