当前位置: 首页 > news >正文

高端企业网站建设服务商河南科兴建设有限公司网站

高端企业网站建设服务商,河南科兴建设有限公司网站,石狮网站建设公司哪家好, 上的视频直播下载目录 一、概念 二、思路 三、边界问题 一、概念 在一本书中查找某一页#xff0c;我们总是倾向于先翻到整本书的中间#xff0c;然后根据当前页数判断我们想要找的页在当前页的左半本中还是右半本中#xff0c;接着继续翻到剩下半本书的中间...... 这就是二分查找思想在…目录 一、概念 二、思路 三、边界问题 一、概念 在一本书中查找某一页我们总是倾向于先翻到整本书的中间然后根据当前页数判断我们想要找的页在当前页的左半本中还是右半本中接着继续翻到剩下半本书的中间...... 这就是二分查找思想在现实中的应用但为什么这种方法能够比较快的查找到我们想要的页数这是因为书中的页数是有序的通过当前页数与目标页数的比较我们能够确保目标页在当前页的左侧还是右侧 二、思路 二分查找的时间复杂度为O(logN)但是只适用于在有二分性质的序列中进行查找 二分性质即我们可以自定义一个性质让区间的左半部分都不满足右半部分都满足  最朴素的场景有序的数组 以下面的有序数组为例首先用l和r维护我们需要二分的区间 取区间的中点判断中点值与我们的目标的大小关系 注意如果区间元素的个数是奇数那么只有一个中点但如果元素个数是偶数那么就会存在两个中点例如上面的5和7都是中点 此处我们只讨论比较特殊的情况即有偶数个元素的情况 对于该情况我们可以选择每次取区间的左中点或右中点 取左中点 int mid (l r) / 2; int mid l (r - l) / 2; //防溢出 如果采用上面(l r) / 2的方式来取左中点如果l和r的值过大则有数值溢出的风险因此建议使用第二个的方式 取右中点 int mid (l r 1) / 2; int mid l (r - l 1) / 2; //防溢出 由于除法向下取整因此如果元素个数为奇数不论是以取左中点的方式还是取右中点的方式我们都能够取到中点例如 下面以偶数个元素为例 以取左中点为例我们取左中点值5 5比8小且我们的数组是升序的则要查找的目标在右半部分 重复上述步骤 要理解二分查找的思路并不难有难度的地方在于其边界问题的处理 三、边界问题 以取左中点为例我们先来看正确的代码 int Binary_Search(int* a, int sz, int x) //假设数组升序 {int l 0, r sz - 1; //区间左右边界while(l r){int mid l (r - l) / 2; //取左中点if(a[mid] x) //中点值比x大目标在左半部分r mid;else if(a[mid] x) //中点值比x小目标在右半部分l mid 1; else //相等return mid; //返回下标}//走出循环说明lr判断此时位置是否与x相等if(a[l] x)return l;return -1; } 可以看到当中点值比x大时目标在左半部分r移动到原来mid的位置但当中点值比x小时目标在右半部分而l却移动到了mid1的位置。为什么不是和r一样移动到mid 我们看一个最简单的例子 只有两个元素中点mid与l位置重合且目标为2大于中点值1此时l需要移动到mid1的位置 可以正常找到我们的目标 但如果上一步中l移动到mid的位置会怎么样呢l和mid的位置本来就是重合的移动过后位置没有改变导致死循环 这说明不论是取左中点还是右中点一旦边界问题没有处理好那么就会导致死循环 取右中点的代码 int Binary_Search(int* a, int sz, int x) //假设数组升序 {int l 0, r sz - 1; //区间左右边界while(l r){int mid l (r - l 1) / 2; //取右中点if(a[mid] x) //中点值比x大目标在左半部分r mid - 1;else if(a[mid] x) //中点值比x小目标在右半部分l mid; else //相等return mid; //返回下标}//走出循环说明lr判断此时位置是否与x相等if(a[l] x)return l;return -1; } 修改对应取中点的方式并修改r和l的移动方式即可原理和上面是相同的 如果不想考虑边界情况则还有一种方式 int Binary_Search(int* a, int sz, int x) //假设数组升序 {int l 0, r sz - 1; //区间左右边界while(l r){int mid l (r - l) / 2; //取左中点//int mid l (r - l 1) / 2; //取右中点if(a[mid] x) //中点值比x大目标在左半部分r mid - 1;else if(a[mid] x) //中点值比x小目标在右半部分l mid 1; else //相等return mid; //返回下标}return -1; } 在这种方式下r和l移动后都不会与原来的mid位置重合 完.
http://www.hkea.cn/news/14565253/

相关文章:

  • 网站建设优化合同自己做博客网站
  • html5作业 建设网站保定建站模板
  • 合肥快速建站模板网站服务器租用一般费用
  • 做电影网站用什么格式好wordpress 画线不显示不出来
  • 公司怎么建网站做推广移动网站性能
  • 网站建设应用潮州外贸网站建设
  • 湖州本地做网站珠海做网站优化的公司
  • 邯郸网站建设找谁音乐 版权 做视频网站
  • 环保部网站建设项目重大变动原阳网站建设
  • 廊坊网站建设联系青橙网络苏州做网站建设
  • 商城网站建设二次开发台海最新24小时消息
  • 网站开发项目进度安排宁德商城网站建设
  • 丹阳做公司网站wordpress 小程序源码
  • 网站开发毕设开题报告怎么写个人建什么网站好
  • 用jsp做学校网站网页传奇游戏排行榜前十名端游
  • 焦作住房和城乡建设局网站seo整站优化费用
  • 南希网站建设如何用dw做网站前端
  • 肇庆中小企业网站制作一号建站
  • 网站建设合同英文版网上做环评立项的网站是哪个
  • 网站地图可以自己做么自己免费怎么制作网站吗
  • 网站定制开发费用多少网站备案到公司名称
  • 站长工具app官方下载购物网站开发需求文档
  • 网站维护 上海淘宝购物网站开发有什么功能
  • 可以建网站的公司找不到网站后台怎么办
  • 网站权重能带来什么作用网站源码在线查看
  • 南川区 网站集约化建设方案四川招标信息网官网
  • 网站开发了下载文件需要网页设计公司开设需要投资多少钱
  • 企网站建设郑州小程序开发价格
  • 五合一网站做优化好用吗盘锦化工网站建设
  • seo针对网站做策划大公司的网站都找谁设计