即使数据存在于数组中,我的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));
}
}
答案 0 :(得分: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.所以其他部分即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条件,只检查相等性并根据需要调整q在其他ifs中。