从C中的递归二进制搜索返回布尔值

时间:2016-06-06 00:58:34

标签: c recursion cs50

我正在尝试在C中实现递归二进制搜索。我使用CS50库将bool定义为一种类型。我的代码将在测试数组中找到输入的值。但是,当我用if语句检查返回值r时,它通常返回false,即使找到了数字。我的代码如下:

#include <stdio.h>
#include <cs50.h>

bool binarysearch(int value, int values [], int n, int lo, int hi);
int main(void)
{
    // test array of 6 values sorted.
    int values[] = {1 , 2, 3, 4 , 5, 6};
    int n = 6;
    int hi = values[n-1];
    int lo = values[0];
    // input from user
    printf("What number\n");
    int value = GetInt();
    //search for value in test arary
    bool r = binarysearch(value,values,n,lo,hi);
    if (!r)
    {
        printf("not right\n");
        return 1;
    }
    return 0;
}

bool binarysearch(int value, int values [], int n, int lo, int hi)
{
    int mid;
    mid = (lo + hi)/2;
    // condition to avoid indexing error
    if (((mid == 0) || (mid == n-1)) && (values[mid] != value) )
    {
        return false;
    }
    //check if value is at mid index in test array
    if (values[mid] == value)
    {
        printf("Key Found\n");
        return true;
    }
    // check right half of array
    else if(value > values[mid])
    {
        binarysearch(value, values,n, mid+1, hi);
    }
    //  check left half of array
    else if(value <values[mid])
    {
        binarysearch(value, values,n,lo, mid-1);
    }
    return false;
}

1 个答案:

答案 0 :(得分:0)

此示例将执行二进制搜索并返回布尔值,类似于您的代码,但算法必须正确。

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

bool binarysearch(int value, int values[], int n, int lo, int hi) {
    int mid = (hi + lo) / 2;
    if (lo <= hi) {
        if (values[mid] == value) {
            printf("Key found at index %d \n", mid);
            return true;
        }
        else if (values[mid] > value)
            return binarysearch(value, values, n, lo, mid);
        else
            return binarysearch(value, values, n, mid + 1, hi);;
    }
    else return 0;
}

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

    int hi = values[n - 1];
    int lo = values[0];
    printf("What number? \n");
    scanf("%d", &value);

    if (!binarysearch(value, values, n, 0, 5))
        printf("Number not present in array\n");
}

您可以使用1到13之间的随机整数来尝试此算法online,如果您按照链接,则有50%的机会找到该数字。