0

我试图通过修改二进制搜索算法来实现它。

int search(int *a, int start,int end,int sum){
int s=start,e=end-1,m;
while(s <= e){
    m=s+(e-s)/2;
    if(a[m] == sum){
        return m+1;            
    }
    else if (a[m] < sum) {
        s = m + 1;
    }
    else {
        e = m - 1;
    }
}
return m;}

上述算法有什么问题?

4

1 回答 1

1
int search(int *a, int start,int end, int sum) {
    int s = start, e = end - 1, m;
    while(s <= e) {

更简单的是

    // m=s+(e-s)/2;
    m=(s+e)/2;

你必须保持循环,也许有重复的元素

//            if(a[m] == sum){
//                return m+1;            
//            } else

注意条件更改为<=

//      if (a[m] < sum) {
        if (a[m] <= sum) {
            s = m + 1;
        }
        else {
            e = m - 1;
        }
    }

必须回到s这里

//  return m;
    return s;
}
于 2013-11-09T16:10:24.340 回答