永发信息网

用c语言实现折半查找

答案:4  悬赏:10  手机版
解决时间 2021-04-05 09:28
用c语言实现折半查找
最佳答案
#include
int find(int a[],int x,int n,int m)
{int i;
 if(n>m)return -1;
 i=(n+m)/2;
 if(a[i]==x)return i;
 if(a[i]>x)return find(a,x,n,i-1);
 return find(a,x,i+1,m);
}
int main()
{
int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51};
int x,i;

printf("已有的数是:
");for(i=0;i<20;i++)
printf("%d ",a[i]);

printf("
请输入要查找的数:");scanf("%d",&x);
if((i=find(a,x,0,19))>=0)

printf("%d是第%d个数
",x,i+1);

else printf("未找到%d
",x); return 0;

}

全部回答
int binary_search(int * data,int len,int target)
{
int b;
if (len==1&&*data!=target)b=-1;
else if (target<data[(len)/2]) b=binary_search(data,len/2,target);
else if (target>data[(len)/2]) {
b=binary_search(data+(len/2),len/2+1,target) ;
b+=b==-1?0:len/2;
}
else if (target==data[(len)/2]) b=(len)/2+1;
return b;
}
////////////////////////////////////////////////////////////////
调用示例:
////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
#include <stdio.h>
int binary_search(int * data,int len,int target)
{
int b;
if (len==1&&*data!=target)b=-1;
else if (target<data[(len)/2]) b=binary_search(data,len/2,target);
else if (target>data[(len)/2]) {
b=binary_search(data+(len/2),len/2+1,target) ;
b+=b==-1?0:len/2;
}
else if (target==data[(len)/2]) b=(len)/2+1;
return b;
}
int main(void)
{
int a[]={1,3,5,6,7,9,16};
printf("%d\n%d\n",binary_search(a,7,9),binary_search(a,7,15));
return 0;
}
//---------------------------------------------------------------------------
#include<stdio.h>
int binary_search(int * data,int len,int target)
{
int high=len-1,low=0,mid;
mid=(high+low)/2;
while(high>low)
{
if(target>data[mid])
low=mid+1;
else if(target<data[mid])
high=mid-1;
else return mid;
mid=(high+low)/2;
}
return -1;
}
int main()
{
int a[]={0,1,2,3,4,5,6,7,8,9};
int i=binary_search(a,10,5);
if(i==-1)
printf("Not Foun!\n");
else
printf("Foun %d at %d\n",a[i],i);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
银润批发超市怎么去啊,有知道地址的么
怎么去广州市天河区黄埔大道西163号富星商贸
表达为人处事的句子,请教一下做人处事的智慧
两张开通了短号的本地卡。若有一方出了省。短
男女单挑谁会赢
关于麻将不求人。。
天珠有绿色的吗
单选题在由上海开往旧金山的海轮上,人们见到
人为什么要读书
求一首藏头诗,名字叫江茹!谢谢了
关于梦幻四开女儿村
人民币CHY买入价是指汇买价吗
nba历史上双方得分和最少的比赛
表达赞扬古诗词,描写景色的佳句
让胡路区大庆童泰孕婴在哪里啊,我有事要去这
推荐资讯
装入清洗带摄象机上出现 thc tape is iocked-
不忘初心续写青春篇章演讲稿
难道法有方法不想你,歌词,粤语
我想去西安长达(长威)公司应聘,不知道那个
求婚大作战日语台词,约会大作战 语录
外聘老师是什么意思,如何看待国企外聘员工和
陕汽德龙f3000前四后八自卸首付多少钱
单选题对一些难以生根的林木枝条,在扦插时用
求父亲的感情像山一样(f a r s)百度云资源
不好意思的意思是什么,能不能解释下《推背图
镜音レン-ロストワンの号哭【カバー】的歌词
电脑xp系统安装教程( 怎么重装系统)最棒:V
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?