我的二进制搜索功能无法正常工作

时间:2014-12-16 17:50:27

标签: c arrays recursion binary-search

首先,对不起我的英语,这不是我的母语。

大家好,我的二进制搜索功能有问题。我需要使用布尔类型创建二进制搜索的递归函数(使用C语言),这里是:

bool binary_search(int x, int array[], int m, int n){
  int middle=(m+n)/2;
  if(m>n) return(0);
  else if(x == array[middle]) return(1);
  else if(x < array[middle]) return(binary_search(x, array, m, middle-1));
  else return(binary_search(x, array, middle+1, n));
}

这是主函数中的调用:

printf("type the element to search: \n"); scanf("%d", &x);
if(binary_search(x, A, 0,dim-1)) printf("Found!\n");
else printf("Not found!\n");

问题是,它始终返回&#34;未找到&#34;即使元素不在数组中。我试图更改if命令中的逻辑,但它只是使所有结果变为&#34;找到&#34;。如果有人可以提供帮助,我会很高兴。

更新:我更改了&#34; =&#34;问题,但输出仍然错误,我打印了函数的输出,它总是为零

4 个答案:

答案 0 :(得分:4)

以下行存在严重问题:

else if(x = array[middle]) return(1);

您要将x的值分配给array[middle],而不是将array[middle]x进行比较。如果此值非零,则它将始终求值为true,因此您的函数将始终返回该点。您应该使用比较相等的==而不是=,这意味着分配。

这是初学C程序员中一个非常常见的错误,所以你可能想知道为什么A = B甚至是C中的表达式,而不是Python中的语句。 (事后?)的基本原理是,在表达式中分配变量有时非常方便。考虑:

char *error;
if ((error = do_something()) != NULL) {
    printf("error: %s\n", error);
    // ...
}

答案 1 :(得分:2)

您正在使用赋值=而不是相等的测试==。结果表达式可能不为零,因此if比较为真。

答案 2 :(得分:0)

好的,你检查一下你是否将排序数组作为二进制搜索功能的输入?如果不是那么使用二分搜索将无法给出正确的答案。

答案 3 :(得分:0)

我创建了错误:

我在函数中生成随机数(&#34; random_numbers()&#34;),&#34; dim&#34;变量在该函数内部,因此,main()内的dim为0.因此搜索的返回值将始终为0.我觉得有点愚蠢,但感谢所有人的帮助。抱歉新手错误。