这个二进制搜索实现中的无限循环?

时间:2015-01-05 16:01:10

标签: c binary-search

任何人都可以帮我找到二进制搜索算法的这个实现中的错误。我猜它是在一个无限循环中运行。功能定义存在问题,但不确定是什么。

#include <stdio.h>
#define max 5

int binarysearch(int a[],int element,int first,int last);//prototype

int main(void) 
{
    int arr[max]={1,2,3,7,8};
    int b;
    int start=0;
    scanf("%d",&b);
    int search=binarysearch(arr,b,start,max-1);
    if(search==-1)
    {
        puts("element is not there in array");
    }
    else
    {
        printf("element found at position %d",search);
    }
}

int binarysearch(int a[],int element,int first,int last)//definition
{
    int mid=(first+last)/2;
    int initial;int final;
    while(first<=last)
    {
        if(a[mid]==element)
        {
            return mid;
        }
        else if(a[mid]<element)
        {
            initial=mid+1;
            final=last;
            binarysearch(a,element,initial,final);
        }
        else if(a[mid]>element)
        {
            initial=first;
            final=mid-1;
            binarysearch(a,element,initial,final);
        }
    }
    return -1;
}

2 个答案:

答案 0 :(得分:2)

你在函数中有一个不必要的循环:

while(first<=last)

这是一个无限循环,因为firstlast永远不会在循环内重新分配。您已经通过在循环体内调用binarysearch来使用递归。将while更改为if,或移除递归调用并分配给firstlast,而不是initialfinal(并重新计算) mid相应地)。

如果您决定坚持使用递归方法,也可以将调用更改为return binarysearch(…);,否则返回值将丢失。

答案 1 :(得分:0)

进行以下更改

int binarysearch(int a[],int element,int first,int last)//definition
{
int mid=(first+last)/2;
int initial;int final;

if(first > last)
{
  printf("Not found\n");
  return -1;
}
    if(a[mid]==element)
    {
        return mid;
    }
    else if(a[mid]<element)
    {
        initial=mid+1;
        final=last;
        binarysearch(a,element,initial,final);
    }
    else if(a[mid]>element)
    {
        initial=first;
        final=mid-1;
        binarysearch(a,element,initial,final);
    }
}