C 什么';这个二进制搜索函数有什么问题?
我试图解决一个二进制搜索的Spoj问题,但我一直得到“错误答案”,我看不到我的问题。 以下是我的b搜索功能:C 什么';这个二进制搜索函数有什么问题?,c,binary-search,C,Binary Search,我试图解决一个二进制搜索的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;
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-binarySearch(int-number[],int-size,int-key)
{
int start=0;
int end=大小-1;
中间;
while(起始编号[中间])
开始=中间+1;
其他的
返回中间;
}
返回-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;
}
intmain()
{
整数*数字;
int n_编号,n_查询,键,i,find;
scanf(“%d%d”、&n\u编号和&n\u查询);
数字=(int*)malloc(n_数字*sizeof(int));
对于(i=0;i您的算法是正确的。数据未排序,因此您的二进制搜索算法无法正确地对解决方案进行归零。您的算法是正确的。数据未排序,因此您的二进制搜索算法无法正确地对解决方案进行归零。不完全清楚您使用的是哪种基于C的语言,但可能会使用表达式sion(end-start)/2可能返回一个浮点值,当您实际需要舍入该值时,该值会被截断为整数?不完全清楚您使用的是哪种基于C的语言,但可能是表达式(end-start)/2是否可能返回一个浮点值,当您实际希望将该值四舍五入时,该值会被截断为整数?问题是,您需要返回第一次出现的位置(从零开始),并且在找到键后立即返回
但阵列可能是:
0112
键是1。您应该返回1(第一次出现的位置),而不是返回6。问题是,您需要返回第一次出现的位置(从零开始),并且在找到键后立即返回
但阵列可能是:
0112
并且键是1。您应该返回1(第一次出现的位置)相反,您返回的是6。似乎是正确的。您能给出输入/输出示例吗?为了使其工作,您必须对正在进行二进制搜索的数组进行排序POJ没有给出测试用例,所以我不知道它为什么说wrong@J0rge:您至少可以将lin添加到SPOJ问题中。这是错误的,因为您传递的数据未排序。您必须对Spoj/客户端提供的数据进行排序。然后运行二进制搜索。似乎是正确的。您能给出输入/输出示例吗?为了使其正常工作,您必须对二进制搜索的数组进行排序。Spoj没有给出测试用例,所以我不知道为什么它会这样说wrong@J0rge:您至少可以在SPOJ问题中添加lin。这是错误的,因为您要传递的数据没有排序。您必须对Spoj/客户端提供的数据进行排序。然后运行二进制搜索。可能是这样的问题:。如果调用方没有提供排序数据,则B搜索毫无用处。@Zeta是的,非常肯定。可能是这样的问题:。如果调用方没有提供排序数据,则B搜索毫无用处。@Zeta是的,非常肯定。这是因为缺少排序数据。请注意OP假设数据将如何排序,这不是保证。这是因为缺少排序数据。请注意OP假设数据将如何排序,这不是保证。请简要说明下一个问题:如果问到SPOJ,请添加问题的链接,无论如何至少复制com请描述一下。我必须遵循Zeta提供的链接,才能发现你应该返回第一个事件(而不是任何事件)。好的,很抱歉。我将为可能需要帮助的人编辑我的问题。请为下一个问题提供一个简短说明:如果您询问SPOJ,请添加问题的链接,无论如何至少复制完整的描述。我必须按照Zeta提供的链接查找您是否应该返回第一个事件(没有发生)。好的,很抱歉。我将为可能需要帮助的人编辑我的问题