二进制搜索递归无法正常运行

时间:2017-12-17 07:00:48

标签: c binary-search

我编写了一个简单的二进制搜索来打印出搜索内容的位置。 它正确识别搜索到的元素何时不在数组中并打印出"错误"。 但是,当搜索到的元素实际位于数组中时,将打印该值,而不是位置。能不能让我知道我错过了什么? 提前致谢

#include <stdio.h>
#include <stdlib.h>

int binarysearch(int array[], int low, int max, int search);
int main(void) {
    int array[10]={10,11,12,13,14,15,16,17,18,19};

    int count,search;
    count=sizeof(array)/sizeof(array[0]);

    printf("Enter the number you would like to search\n");
    scanf("%d",&search);

    int result=binarysearch(array,0,count,search);

    if (result>0){
        printf("Element in position %d",result);
    }
    else{
        printf("Error");
    }

}

int binarysearch(int array[], int low, int max, int search){
    if(low<=max){
        int middle=(low+max)/2;

        if(search>array[middle]){
            low=middle+1;
            return binarysearch(array,low,max,search);
        }

        else if(search<array[middle]){
            max=middle-1;
            return binarysearch(array,low,max,search);

        }

        else {
            return search;
        }

    }
    else
    return -1;
}

1 个答案:

答案 0 :(得分:2)

$scope.id(代替return middle;)更改外,您还应更改

return search

否则即使找到了,你也总会错过第0个元素。 (小姐我的意思是结果不会被打印出来)。二进制搜索将按预期工作。

需要注意的另一件事是在计算if (result>=0){ ^^^^ printf("Element in position %d",result); } 以避免溢出时使用此

mid

最后,使用递归纯粹是浪费。

int middle = low + ((max - low) / 2);