不客气说,你这个代码写的错误的地方实在是太多了,而且逻辑也不是很清楚,包括传递参数的方式等都不太好,还有既然是一个独立的函数就尽量不要使用全局变量,不过还是在你的基础上给你改了一下,以便你能对比的看一下,代码如下:
#include<stdio.h>
int x=1,b;
void main()
{
int a[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
scanf("%d",&b);
int bysearch(int a[15]);
int result=bysearch(a)+1;//应该先调用函数,否则x无法在你的下一步判断前进行更新
if(x==2) //此处应该使用==
printf("%d",result);
else printf("木有");
}
int bysearch(int a[15])
{
int m=0,n=14,i;
for(;n-m>1;) //n-m!=1,那么n-m==1的情况呢,你的代码中没有进行处理
{
i=(m+n)/2;//这一句应该放在循环中
if(a[i]!=b)
{
if(a[i]>b) m=i;//既然已经有了i的赋值,那就不要用(m+n)/2
else n=i;
}
else
{
x=x+1;
break;//既然找到了,就该跳出循环了,直接返回了,否则会多余循环操作
}
if (n-m==1)//-处理差为1的情况
{
if (a[n]==b)
{
x=x+1;
return n;
}
else
{
if (a[m]==b)
{
x=x+1;
return m;
}
else
return -1;
}
}
}
return(i);
}
其实折半查找用递归操作最好了,代码简洁一目了然,还有就是判断好边界,你写的这个折半查找函数只能用于一处,不具备普遍价值,最好的这样的形式
int biSearch(int array[],int m,int n,int value);
温馨提示:答案为网友推荐,仅供参考