首页 文章

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

提问于
浏览
0

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

#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 回答

  • 2

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

    while(first<=last)
    

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

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

  • 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);
        }
    }
    

相关问题