如何在排序数组中查找元素,使其后面的所有元素都大于给定值?

时间:2013-11-09 15:43:17

标签: algorithm search binary-search

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

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;}

上述算法有什么问题?

1 个答案:

答案 0 :(得分: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;
}