C 递归二进制搜索无法正常工作
现在的问题是,每当我想搜索数组的最后一个元素时,这段代码就会给出一个错误。C 递归二进制搜索无法正常工作,c,recursion,binary-search,C,Recursion,Binary Search,现在的问题是,每当我想搜索数组的最后一个元素时,这段代码就会给出一个错误。 有人能解释一下原因吗?根据第一个索引p和最后一个索引r进行搜索结束 int BinarySearch(int A[], int p, int r, int value) { int q = (p + r) / 2; if (A[q] == value) { return q; //value found } if (p == q) {
有人能解释一下原因吗?根据第一个索引
p
和最后一个索引r
进行搜索结束
int BinarySearch(int A[], int p, int r, int value)
{
int q = (p + r) / 2;
if (A[q] == value)
{
return q; //value found
}
if (p == q)
{
return 0; //not found
}
if (A[q] > value)
{
return BinarySearch(A, p, q, value);
}
else
{
return BinarySearch(A, q + 1, r, value);
}
} //binary search ends here
这你能提供一组代码失败的数据吗?好的,问题解决了。我应该写第二个条件,如果在最后检查P==Q,它就正常工作了。顺便说一下,任何改进这段代码的建议都会被理解。@ DasBrink NeLink我使用DEV C++ IDE,输入了一个1×2,3,4,5的数组,检查了5个。我的代码中仍然存在错误。如果我要搜索数组中不存在的值,但LearningC提供的解决方案是正确的,那么它的行为将异常。谢谢你好LearningC,你能解释一下如何获得它的时间复杂度吗?@sunki08好的。读这些,然后。搜索二进制搜索的时间复杂度你会得到许多关于推导时间复杂度的链接。
int BinarySearch(int A[], int p, int r, int value)
{
int q = (p + r) / 2;
if( p > r )
{
return 0;
}
if (A[q] == value)
{
return q; //value found
}
if (A[q] > value)
{
return BinarySearch(A, p, q-1, value);
}
else
{
return BinarySearch(A, q + 1, r, value);
}
}