我正在尝试稍微更改二进制搜索,而不是仅仅查找元素的索引,当且仅当它在数组中时,我想找到最小索引,使得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;
}
答案 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