重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h//不用math头文件
成都创新互联专注于企业营销型网站建设、网站重做改版、陆港网站定制设计、自适应品牌网站建设、成都h5网站建设、商城开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为陆港等各大城市提供网站开发制作服务。
void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low赋初值
scanf("%d",k);
while (high=low)//=
{
m=(high+low)/2;
if(ka[m]) high=m-1;//比较的是数值而不是下标
else if(ka[m]) low=m+1;
else
{
printf("yes");
return;//这两句地方放错了
}
}
printf("no");
return;//if语句去掉
}
二分法查找算法:
1. 主要思想是:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
2. 时间复杂度: O(log2n)。
3. C语言源代码(小例子)
search函数即为核心代码:递归查找
#includestdio.h
int search(int *a, int num, int low, int high)
{
int mid =(low + high)/2;
if(low=high)
{
if(num a[mid])
return search(a, num, low, mid-1); //加return
if(num a[mid])
return search(a, num, mid+1, high);//加return
if(num==a[mid])
return 1;
}
else
return 0;
}
int main(){
int a[11] = {0, 1, 2, 3, 4, 5, 9, 11, 12, 13, 15};
if(search(a, 11, 0, 10)==1)
printf("success!!");
else
printf("failed!!");
}
#includestdlib.h
void
sort(int
a[],int
n){
/*排序函数,要使用二分法查找就必须对数组进行排序*/
int
i,k;
for(i=0;in;i++){
int
min=i;
for(k=i+1;kn;k++)
if(a[min]a[k])min=k;
if(i!=min){
a[min]+=a[i];/*这里是运用加减法交换两个数*/
a[i]=a[min]-a[i];
a[min]-=a[i];
}
}
}
int
find(int
a[],int
n,int
key){/*二分法查找;参数:数组名,数组长度,查找关键字*/
int
min=0,max=n-1;/*二分法查找头尾变量*/
while(minmax){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/
int
cen
=
(min+max)/2;
if(a[cen]==key)
return
cen;/*如果查到,则返回关键字在排序数组的下标*/
if(cen==min
||
cen==max)break;/*如果中间变量等于头尾任一个变量,同样查找失败*/
if(a[cen]key)
max=cen;
else
min=cen;
}
return
-1;
}
void
main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/
int
a[]={14,10,25,36,87,95,10,12,13,8},i;
sort(a,10);
i=find(a,10,11);
if(i!=-1)
printf("be
found");
else
printf("no
found");
getch();
}