首先,对不起我的英语,这不是我的母语。
大家好,我的二进制搜索功能有问题。我需要使用布尔类型创建二进制搜索的递归函数(使用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;问题,但输出仍然错误,我打印了函数的输出,它总是为零
答案 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.我觉得有点愚蠢,但感谢所有人的帮助。抱歉新手错误。