c - 我的二进制搜索实现有什么问题?

标签 c binary-search

#include <stdio.h>
int bsearch(int a[], int n, int lo, int hi) {
    int mid;
    mid = (hi + lo) / 2;
    if(a[mid] == n)
        return 1;
    else if(a[mid] > n)
        bsearch(a, n, lo, mid);
    else
        bsearch(a, n, mid, hi);
    return 0;
} 

int main(void) {
    int n, a[7] = {2, 4, 5, 67, 70, 80, 81};
    int hi = 6, lo = 0, j;
    scanf("%d", &n);
    j = bsearch(a, n, lo, hi);
    if(j)
        printf("Found");
    else
        printf("Not Found"); 
    return 0;
 }

input : 5 output: Not Found

谁能告诉我为什么会得到这个结果?

最佳答案

您需要解决几个大问题才能使其正常工作(请参阅以下代码注释中的详细信息)。

将您的二进制搜索函数更改为以下内容:

int bsearch(int a[], int n, int lo, int hi)
{
    // add base case
    if (high < low)  
        return 0; // not found 

    int mid;
    mid=(hi+lo)/2;
    if(a[mid]==n)
        return 1;
    else if(a[mid]>n)
        return bsearch(a,n,lo,mid-1); // add return
    else
        return bsearch(a,n,mid+1,hi); // add return
} 

P.S.: 根据您在 main() 主体中的用法,您实际上只需要返回 0/1 以指示包含值与否。我会建议您使用 bool 返回类型以使其更清晰。

关于c - 我的二进制搜索实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709124/

相关文章:

java - 递归插入排序列表

c++ - 如何使用成对的 STL 二进制搜索操作?

java - 使用后缀数组搜索后缀

对 getChar 和 printf 的调用似乎修改了不相关的数据

c - 当进程使用 shm_open() 时,Linux 内核如何分配内存指针?

python - Mac 操作系统, pip : specify compiler for packages containing C libraries

c++ - 如何防止pcre(C库)在一个字符串失败时继续匹配?

c - 任何优化都会删除代码(指向数组的 volatile 指针)

go - 两种算法,我的机器上的结果相同,测试上的结果不同

c# - 为什么会有 List<T>.BinarySearch(...)?