二分查找函数总是返回 -1 值而不是索引
Posted
技术标签:
【中文标题】二分查找函数总是返回 -1 值而不是索引【英文标题】:binary search fuction always returns -1 value instead of index 【发布时间】:2018-01-29 13:45:56 【问题描述】:即使数组中存在数据,我的 Binarysearch 函数也始终返回 -1 而不是索引。谁能帮我解决问题
int main()
int ar[10]=1,2,3,4,5,6,7,8,9,10;
int i,w;
cout<<"enter the element to search"<<endl;
cin>>w;
int y = binarysearch(ar,w,0,9);
cout<<y<<" index"<<endl;
return 0;
int binarysearch(int ar[],int x,int p,int r)
int q;
if(p==r)
if(ar[r]==x)
return r;
else
return -1;
else
q = ((r+p)/2);
if(x<ar[q])
return(binarysearch(ar,x,p,q));
else
return(binarysearch(ar,x,q+1,r));
【问题讨论】:
如果有人投了反对票,请给我建议我如何以更好的方式提出这个问题 如果x == ar[q]
,您以一种将q
排除在进一步考虑之外的方式递归调用binarysearch
。实际上,您确保该元素不会被找到。
先生如何进行适当的更正
通常在您喜欢的文本编辑器中打开源文件,然后使用键盘进行更改。如果这是你的要求,我不会为你做作业。
见:How to debug small programs。
【参考方案1】:
您的代码几乎是正确的。
问题在于if(x<ar[q])
。
考虑数组:
int arr[11] = 0 10 20 30 40 50 60 70 80 90 100
它的索引是:
0 1 2 3 4 5 6 7 8 9 10
考虑用户传递w=50
,中间索引q
计算为5
条件if(x<ar[q])
将为假,因为 50 不小于 50。所以它的 else 部分,即return(binarysearch(ar,x,q+1,r));
将被运行,即return(binarysearch(ar,50,6,10));
这里代码走错了方向。我们开始查找错误的子数组。
我们正在寻找的项目50
在第一个子数组中,即0 10 20 30 40 50
,而不是在第二个子数组中,即60 70 80 90 100
。
修复代码的一种方法是将条件if(x<ar[q])
设为if(x<=ar[q])
。或者您可以添加另一个 if 条件来检查是否相等并根据其他 if 的要求调整 q。
【讨论】:
以上是关于二分查找函数总是返回 -1 值而不是索引的主要内容,如果未能解决你的问题,请参考以下文章