任何人都可以帮我找到二进制搜索算法的这个实现中的错误。我猜它是在一个无限循环中运行。功能定义存在问题,但不确定是什么。
#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;
}
答案 0 :(得分:2)
你在函数中有一个不必要的循环:
while(first<=last)
这是一个无限循环,因为first
和last
永远不会在循环内重新分配。您已经通过在循环体内调用binarysearch
来使用递归。将while
更改为if
,或移除递归调用并分配给first
和last
,而不是initial
和final
(并重新计算) 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);
}
}