谁会C++折半算法的进来,希望能给出答案!

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:58:57
#include<stdio.h>
#define N 10

int fun(int a[],int m)
{
int low=0,high=N-1,mid;
while (low<=high)
{
mid=(low+high)/2;
if(m<a[mid])
high=mid-1;
else if(m>=a[mid])
low=mid+1;

____________
}

___________________
}

main( )
{
int i,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;
printf("a 数组中的数据如下:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("Enter m: ");
scanf("%d",&m);
k=fun(a,m);
if(k>0)
printf("m=%d,index=%d\n",m,k);
else
printf("Not be found!\n");
getch();
}

else if(m>=a[mid]) 是不是应该改为else if(m>a[mid]) ?
如果是这样的话,第一个空:if(m==a[mid]) return mid;

第二个空:return -1;

int BSearch(int *a,int size,int key)
{
int low=0,up=size-1,mid;
while(low<=up)
{
mid=(low+up)/2;
if(a[mid]==key)
return mid;
else if(a[mid]>key)
up=mid-1;
else if(a[mid]<key)
low=mid+1;
}
return -1;
}
你那else if(m>=a[mid])
low=mid+1;
明显错误

int halfsearch(int array[],int n,int k)
{int i,j,mid;
i=1;j=n;
while(i<=j)
{mid=(i+j)/2;
if(k==array[mid]) return(mid);
else if(k<array[mid]) j=mid-1;
else i=mid+1;
}
return(0);
}