首先,对不起我的英语,它不是我的母语。
大家好,我的二分搜索功能有问题。我需要做一个二进制搜索的递归函数(使用C语言),使用 bool 类型,这里是:
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");
问题是,即使元素不在数组中,它也总是返回“未找到”。我试图更改 if 命令中的逻辑,但它只是让所有结果都变成“找到”。如果有人能提供帮助,我会很高兴。
更新:我更改了“=”的问题,但输出仍然错误,我打印了函数的输出,它始终为零
最佳答案
下面一行有严重的问题:
else if(x = array[middle]) return(1);
您不是将 x
与 array[middle]
进行比较,而是将 array[middle]
的值分配给 x
。如果这个值不为零,它将始终计算为真,因此您的函数将始终在该点返回。您应该使用比较相等性的 ==
,而不是表示赋值的 =
。
这是初级 C 程序员中极其常见的错误,因此您可能想知道为什么 A = B
在 C 中甚至是一个表达式,而不是像 Python 中那样的语句。 (事后?)理由是有时能够在表达式中分配变量非常方便。考虑:
char *error;
if ((error = do_something()) != NULL) {
printf("error: %s\n", error);
// ...
}
关于c - 我的二进制搜索功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510829/