binary search fuction总是返回-1值而不是index

时间:2018-01-29 13:45:56

标签: c++ algorithm sorting c++11

即使数据存在于数组中,我的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));
    }


    }

1 个答案:

答案 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中。