C ++二进制搜索,如lower_bound

时间:2015-04-14 15:48:18

标签: c++ search binary

我的二进制搜索确实有问题,这应该像lower_bound一样。这让我在第五轮中出现了段错误。任何人都可以看到问题吗?感谢

int BinarySearch ( const char * a, int firstindex , int lastindex){
    if (m_len == 0) return 0; //number of items in searched array
    if ( firstindex == lastindex ) return lastindex;
    int tmp = lastindex - firstindex;
    int pos = tmp/2;
    if ( tmp % 2 != 0 ) ++pos;
    if (strcmp(a,Arr[pos]) < 0) return BinarySearch(a,firstindex,pos-1);
    if (strcmp(a,name) > 0) return BinarySearch(a,pos+1,lastindex);
    return pos;
}

2 个答案:

答案 0 :(得分:1)

  

int tmp = lastindex - firstindex;

应该是:

int tmp = lastindex + firstindex;

那是因为你正在寻找索引x和y的中间,即(x + y)/ 2。

您的代码行为应该是不可预测的,可能会循环并导致分段错误。

答案 1 :(得分:1)

x和y之间的中点是x +(y - x)/ 2,所以你想要

int pos = firstIndex + tmp/2;

使用稍微复杂的表达式而不是明显的(x + y)/ 2表示消除了非常常见的溢出错误。