【发布时间】:2016-03-04 07:03:53
【问题描述】:
这是我的二进制搜索代码,n = no of elements in array
// Binary Search
// BUG: not working for n = 2
#include <iostream>
int main() {
const int n = 1;
int newlist[n];
std::cout << "Enter " << n;
std::cout << " elements in increasing order:\n";
for( int i = 0; i < n; ++i ) {
std::cin >> newlist[i];
}
int pos = 0, num;
std::cout << "Enter number:\n";
std::cin >> num;
std::cout << '\n';
int imin = 0, imax = n-1;
int imid = (n - 1)/2;
for( int i = 0; i < n; ++i ) {
imid = (imin + imax) / 2;
if( newlist[imid] == num ) {
pos = imid;
}
else if( newlist[imid] < num ) {
imin = imid+1;
}
else {
imax = imid-1;
}
}
if( pos != 0 ) {
std::cout << "Found at " << pos+1;
}
else {
std::cout << "Not found!\n";
}
return 0;
}
它对n > 2 有效,但无法为n <= 2 提供正确的输出,即,即使对于找到的元素也提供Not found! 输出。
我认为一种方法是为n <= 2 单独实现,但这会变得很麻烦!请帮忙。
【问题讨论】:
-
欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs.
-
@PaulR 这是一个使用 clang++ 和 g++ 完美编译的程序。因此问题出在逻辑上,使用调试器无法发现!
-
如果您在调试器中单步执行代码,那么您的逻辑错误将立即显而易见。
-
@samjoe,调试器在查找逻辑问题时非常有用。事实上,既然您需要一个可执行文件才能在调试器中运行,那么调试器将如何帮助解决编译失败的问题?答:不会。
-
请指导我如何使用调试器?我的系统上已经有 gdb,但这让我很沮丧。
标签: c++ search binary-search