二进制搜索段错误

时间:2016-09-21 06:49:02

标签: c search recursion binary

我试图以一种略微非传统的方式实现二进制搜索,只使用3个参数int value(我正在寻找),int values [](数组),int n(大小为数组)。下面的代码找到数字2,并认识到13不存在,但找不到像6或7这样的数字。我认为问题出在最后的递归调用中。它可能是一个指针问题。我确定其余的代码工作正常。任何关于我可能出错的想法都会受到赞赏。

#include <stdio.h>
#include <stdbool.h>

bool search(int value, int values[], int n);

int main(void)
{   
    int value = 6;
    int values[] = {1, 2, 3, 4, 5, 6, 7};
    int n = 7;

    bool x = search(value, values, n);

    if (x == true)
        printf("found\n");
    else
        printf("not found\n");
}

bool search(int value, int values[], int n)
{
    int midpoint = n/2;

    if (n/2 <= 0)
    {
        return false;
    }
    if (value == values[midpoint])
    {
        return true;
    }
    if (value < values[midpoint])
    {
        return search(value, values, n/2);
    }
    else if (value > values[midpoint])
    {
        return search(value, values, n/2);
    }

 return false;
} 

1 个答案:

答案 0 :(得分:3)

是的,问题是当您使用数组的上半部分调用搜索时,您应该使用偏移量传递它,如

return search(value, values + (n + 1) / 2, n / 2);

请注意,我还跳过了您已经比较n为奇数的情况的中间元素。您当然可以优化递归调用,始终注意正确计算长度。