【问题标题】:my binary search function doesn't work properly我的二进制搜索功能无法正常工作
【发布时间】:2014-12-17 04:04:28
【问题描述】:

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

大家好,我的二进制搜索功能有问题。我需要做一个二分查找的递归函数(使用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");

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

更新:我改了“=”的问题,但输出还是错了,我打印了函数的输出,结果总是零

【问题讨论】:

  • 这个x = array[middle] 显然不是你想要的。你可能想要x == array[middle]

标签: c arrays recursion binary-search


【解决方案1】:

下面这行有一个严重的问题:

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

您不是将xarray[middle] 进行比较,而是将array[middle] 的值分配给x。如果这个值是非零的,它总是会计算为真,所以你的函数总是会在那个时候返回。您应该使用比较相等的==,而不是表示赋值的=

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      好的,您是否检查过您是否将排序数组作为二进制搜索函数的输入?如果不是,那么使用二分搜索不会给你正确的答案。

      【讨论】:

        【解决方案4】:

        我发现了错误:

        我在函数(“random_numbers()”)中生成随机数,而“dim”变量在该函数内部,因此 main() 内部的 dim 为 0。因此搜索的返回值将始终是 0。我觉得有点愚蠢,但感谢大家的帮助。很抱歉新手错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-17
          • 1970-01-01
          • 1970-01-01
          • 2020-10-25
          • 2013-02-03
          • 1970-01-01
          相关资源
          最近更新 更多