这个二进制搜索功能有什么问题? [英] What's wrong with this Binary Search function?
本文介绍了这个二进制搜索功能有什么问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试解决二进制搜索的Spoj问题,但我总是得到"错误的答案",我看不到我的问题。 以下是我的b搜索函数:
int binarySearch(int numbers[], int size, int key)
{
int start = 0;
int end = size - 1;
int middle;
while(start <= end)
{
middle = start + (end - start)/2;
if(key < numbers[middle])
end = middle - 1;
else if(key > numbers[middle])
start = middle + 1;
else
return middle;
}
return -1;
}
这是我的主要功能
int main()
{
int *numbers;
int n_numbers, n_queries, key, i, found;
scanf("%d %d", &n_numbers, &n_queries);
numbers = (int*)malloc(n_numbers * sizeof(int));
for(i = 0; i<n_numbers; i++)
scanf("%d", &numbers[i]);
for(i = 0; i<n_queries; i++)
{
scanf("%d", &key);
found = binarySearch(numbers, n_numbers, key);
printf("%d
", found);
}
return 0;
}
以下是SPOJ问题:
http://www.spoj.com/problems/BSEARCH1/
推荐答案
问题在于,您需要返回第一个项的位置(从零开始),并且您在找到密钥后立即返回。
但数组可能是: 0 1 1 1 2
键是%1。您应该返回1(第一次出现的位置),但返回的却是6。
这篇关于这个二进制搜索功能有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文