【发布时间】:2015-09-07 00:46:13
【问题描述】:
我正在尝试解决二进制搜索的 Spoj 问题,但我不断收到“错误答案”,我看不到我的问题。 这是我的搜索功能:
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\n", found);
}
return 0;
}
这里是 SPOJ 问题: http://www.spoj.com/problems/BSEARCH1/
【问题讨论】:
-
似乎正确。你能举个例子输入/输出吗?
-
为了让它工作,你必须对你正在二进制搜索的数组进行排序
-
Spoj 没有给出测试用例,所以不知道为什么说错了
-
@J0rge:您至少可以在 SPOJ 问题中添加一个 lin。
-
这是错误的,因为您传入的数据没有排序。您必须对 Spoj / 客户端提供的数据进行排序。然后运行二分查找。
标签: c binary-search