查找数组中的最小索引,使某些键小于或等于Array [index]

时间:2013-03-08 00:42:41

标签: binary-search

我正在尝试稍微更改二进制搜索,而不是仅仅查找元素的索引,当且仅当它在数组中时,我想找到最小索引,使得Array [index]> = key 。因此,如果我有一个像int A[5] = {1,5,10,15,20}这样的数组,并且我调用了search(A, 12, 5)(其中5只是数组的长度),它将从=> 3返回A[3] = 15 >= 12。如果我搜索了20以上的东西,它会给我5或其他任意数字。

我正在尝试尽可能地与传统的二进制搜索一样编写它。有什么帮助吗?

(这里是传统的二元搜索)

int binarysearch(int A[], int key, int length) {
    int low = 0;
    int high = length - 1;
    while (low <= high) {
        int mid = (low + high) / 2;
        if (key < A[mid]) {
            high = mid - 1;
        } else if (key > A[mid]) {
            low = mid + 1;
        } else {
            return mid;
        }
    }
    return -1;
}

2 个答案:

答案 0 :(得分:0)

我认为最好的方法是在密钥小于中间条目时添加一个检查,这将查看上一个条目。如果密钥大于该条目,我们得到了答案(因为如果您在列表中逐步进入,则条目不会大于密钥)。所以,代码看起来像这样:

int low = 0;
int high = length - 1;
while (low <= high)
{
    int mid = (low + high) / 2;
    if (key < A[mid])
    {
        if (key > A[mid-1]
        {
            return mid
        }
        high = mid - 1;
    }
    else if (key > A[mid])
    {
        low = mid + 1;
    }
    else
    {
    return mid;
    }
}
return -1;

如果您的列表允许重复,则需要更复杂,但它应该以其他方式工作。

答案 1 :(得分:0)

而不是return -1,只需返回mid

相关问题