二分查找

来源:互联网 发布:淘宝店铺图标制作 编辑:程序博客网 时间:2024/06/04 04:20

1.二分查找的分析

       对于查找,今晚上老范将了3中方法,

                    1.顺序查找(数组和链表),但是顺序表的效率不太稳定,不适合大数据,因为要找key值一般都是从遍历数组出发的,平均查找长度ASL=(1+n)/2,最坏时间的复杂度为O(n^2),对于这个我写过,就不写

                     2.二分查找,这是先一定要排好序才可以实现,先拿出中间的值a[mid]和key进行比较,比较之后又三种情况啊,相等,大于,小于。等于直接返回么,没有说的;如果大于的话,直接舍弃前一半,即就是下标low到mid的值,并重新赋值low=mid+1,这样大大的提高了查找的效率,这次可以选择递归和非递归实现,反正两个有共同的特点,结束条件,用非递归的话,只要low<=high就行了,用递归,它的结束条件是low比high大了,然后就返回去,其实递归也是我的硬伤,要好好的思考哩。对于这个时间的复杂度就为O(log2 n);

                    3.散列查找,这次不详细的说了,我会专门弄一个专题来大搞特稿的大笑

2.二分查找的非递归代码

#include<stdio.h>int halfsearch(int a[],int low,int high,int key)  //非递归实现 {int mid;while(low<=high)  // 结束条件是low>high{mid=(low+high)/2;if(a[mid]==key)return mid;else if(a[mid]<key)  //中间值比要查的值小low=mid+1;elsehigh=mid-1;}return -1;  //如果没有找到,返回-1}int main(){      int a[10]={1,5,9,15,22,27,33,44,68,97};int low,high,key,mid;low=0;     high=10-1;    printf("请你输入要查找的值: ");scanf("%d",&key);mid=halfsearch(a,low,high,key);if(mid==-1){       printf("你的输入有误\n");}else  printf("你输入%d是第的位置是%d\n",key,mid+1);return 0;}


 

 

3.二分查找的递归代码

#include<stdio.h>int  halfsearch(int a[],int low,int high,int key)  // 用递归实现{int mid;if(low>high)    //递归出口return -1;else{         mid=(low+high)/2;if(a[mid]==key)   return mid;else if(a[mid]<key)return  halfsearch(a,mid+1,high,key);elsereturn   halfsearch(a,low,mid-1,key);}}int main(){      int a[10]={1,5,9,15,22,27,33,44,68,97};int low,high,key,mid;low=0;     high=10-1;    printf("请你输入要查找的值: ");scanf("%d",&key);mid=halfsearch(a,low,high,key);if(mid==-1){       printf("你的输入有误\n");}else  printf("你输入%d是第的位置是%d\n",key,mid+1);return 0;}


 

4.结果演示

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信手机充值不到帐怎么办 中银香港密码器坏了怎么办 香港恒生银行的编码器丢了怎么办 淘宝拍下订单发货物流不显示怎么办 wish查到仿品审核变慢怎么办 淘宝卖家订单号错误无法修改怎么办 顺丰快递运单号微信扫描取消怎么办 买的王者荣耀号有守护平台怎么办 融e联登录密码错三次怎么办 金融e家u盾密码忘了怎么办 用工行网银转账后想取消交易怎么办 工行融e借没有密码器怎么办 工行融e借密码器丢了怎么办 工行融e联手机登录密码忘记怎么办 领导给员工抱怨工作太烦怎么办 员工抱怨忙的忙死闲的闲死怎么办 爱上骗我进传销的人该怎么办 尚赫辟谷期间吃了东西怎么办 肾结石掉在输尿管里面好痛怎么办 寄的快递快递单号找不到了怎么办 手机停机但是快递是这个号码怎么办 百世通快递卡在一个地方没动怎么办 电信无限流量20g用完了怎么办 至尊宝qq密保手机被更换怎么办 至尊宝账户密保手机被改怎么办 照片放到私密相册找不到了怎么办 出口报关报错境内货源地怎么办? 微信提现未到账交易记录删了怎么办 支付宝忘记密码就可以登陆怎么办 电脑上登陆QQ忘记密码了怎么办? 电脑被管理员限制登录微信了怎么办 快手绑定的手机号丢了登不上怎么办 快手绑定的手机号丢了登不了怎么办 苹果id有手机号不知道密码怎么办 微信号不是手机号不知道密码怎么办 手机发短信说程序发生错误怎么办 派派游戏崇物等级低怎么办 轻微事故没有报警后面有问题怎么办 苹果6sp手机接电话声音小怎么办 用手机号办的移动宽带到期了怎么办 联通忘了宽带的用户名和密码怎么办