沧州三亚菏泽经济预测自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

秒懂如何运用二分查找算法

7月19日 囍孤女投稿
  上篇我们讲解了八种排序算法的原理,本文再深度剖析如何运用二分查找算法。一、二分查找的实现
  对于给定的已经有序的数列,我们需要在该数列中查找是否存在某个元素。
  每次都与数列最中间的元素进行比较,可以缩小一半的查找区间,直至找到目标元素或者区间被缩小为0,元素不存在。比如下面的数列中,我们想要查找元素19,那么大致的过程就是这样的:
  二分查找过程示意图
  使用代码实现如下:publicstaticvoidmain(String〔〕args){int〔〕data{8,11,19,23,27,33,45,55,67,98};intresultbinarySearch(data,data。length,19);log。info(查找元素19的位置是:{},result);}publicstaticintbinarySearch(int〔〕data,intsize,inttarget){intlow0;inthighsize1;while(lowhigh){intmiddle(lowhigh)2;if(data〔middle〕target){}elseif(data〔middle〕target){lowmiddle1;}else{highmiddle1;}}log。info(元素{}查找不存在!,target);return1;}
  二分查找的时间复杂度是O(logn),对数阶时间复杂度的算法效率非常高。二、二分查找的特点及使用场景
  二分查找必须依赖以下条件才能发挥作用:数据结构一定要是顺序表,比如数组。如果是不支持随机访问的数据结构,那么二分查找就无法使用;待查找的数列一定要是有序的。如果给定的数列是无序的,那么我们就必须先使用排序算法将数列进行排序,否则也无法使用二分查找;不适合频繁插入和删除的数列;因为数列需要保持有序,要么在插入和删除的时候保证有序,要么在插入数列后使用排序算法进行排序,这些都是时间开销;不适合数据量太小的数列;数列太小,直接顺序遍历说不定更快,也更简单;但是有一种场景除外,就是每次元素与元素的比较是比较耗时的,这个比较操作耗时占整个遍历算法时间的大部分,那么使用二分查找就能有效减少元素比较的次数,从而节约时间;不适合数据量太大的数列;二分查找作用的数据结构是顺序表,也就是数组,数组是需要连续的内存空间的,系统并不一定有这么大的连续内存空间可以使用;三、二分查找相关的变体
  查找第一个等于给定值的元素publicstaticvoidmain(String〔〕args){int〔〕data{8,11,19,19,19,33,45,55,67,98};intresultbinarySearch1(data,data。length,19);log。info(查找元素19的位置是:{},result);}publicstaticintbinarySearch1(int〔〕data,intsize,inttarget){intlow0;inthighsize1;while(lowhigh){intmiddle(lowhigh)2;if(data〔middle〕target){highmiddle1;}elseif(data〔middle〕target){lowmiddle1;}else{当前元素等于目标元素,但是不一定是第一个等于目标元素的if((middle0)(data〔middle1〕!target)){说明当前middle是第一个等于目标元素的}else{继续在middle的前半区间进行查找highmiddle1;}}}return1;}
  查找最后一个等于给定值的元素else{当前元素等于目标元素,但是不一定是最后一个等于目标元素的if((middlesize1)(data〔middle1〕!target)){说明当前middle是最后一个等于目标元素的}else{继续在middle的后半区间进行查找lowmiddle1;}}
  查找第一个大于等于给定值的元素publicstaticintbinarySearch3(int〔〕data,intsize,inttarget){intlow0;inthighsize1;while(lowhigh){intmiddle(lowhigh)2;if(data〔middle〕target){if(middle0data〔middle1〕target){是第一个大于等于target的位置}else{继续往middle的前半部分去找highmiddle1;}}else{继续往middle的后半部分去找lowmiddle1;}}return1;}
  查找最后一个小于等于给定值的元素publicstaticintbinarySearch4(int〔〕data,intsize,inttarget){intlow0;inthighsize1;while(lowhigh){intmiddle(lowhigh)2;if(data〔middle〕target){if(middle(size1)data〔middle1〕target){}else{lowmiddle1;}}else{highmiddle1;}}return1;}四、总结
  在实际的查找业务场景中,凡是可以使用二分查找的问题都可以使用散列表和二叉查找树来完成,而且后面两者的使用频率要更高。
  什么情况下才使用二分查找呢?用于求解近似查找的问题上,比如上面描述的四种二分查找变体问题,而这类问题使用散列表、二叉查找树或者别的数据结构和算法就不太好实现。
投诉 评论

夫妻都犯过的性错误如何打造完美的性生活夫妻生活,不仅仅是夫妻之间的感情调味剂,更是双方的生理需求。换句话说,它就是生活当中不可缺少的一个重要部分。只要和谐的性生活,才能有和谐的家庭生活,在性生活中如果得不到满足,或……高原反应会引起胃炎吗在高原地区游玩的时候,有些人会出现呼吸困难现象,有些人会出现脑水肿,还有的人会出现胃疼症状,那么高原反应会引起胃炎吗?一起来关注本站。高原反应一般不会引起胃炎。初上……秒懂如何运用二分查找算法上篇我们讲解了八种排序算法的原理,本文再深度剖析如何运用二分查找算法。一、二分查找的实现对于给定的已经有序的数列,我们需要在该数列中查找是否存在某个元素。每次都与数……水生态修复有哪些方法生态修复是一项理论复杂、因素众多、操作困难的工作,既要因地制宜,又要符合科学,更要讲究实效。按照水生态系统的理论,结合上海河道、湖泊过去情况的分析,根据现在的实际状况和上海地区……云南大山中发现一座石头城,108户人家聚居在一块石头上,太神在云南丽江旅游的时候,遇到一个神奇的石头城,整个村庄就建在一个巨大的岩石之上,共有108户纳西族人家,这里四面都是悬崖,环境优美,鸟语花香,悬崖下面就是奔腾的金沙江,整个村庄有……新世界十七为什么要杀人跟小时候的经历有关似乎很多观众一时接受不了十七是小红袄的这个事实,甚至觉得这是故意让十七上去背锅。其实剧中此前已经暗示过十七的身份不简单,而且田丹已经怀疑到了他的头上,所以十七才想杀人灭口,现在……三餐造句用三餐造句大全121、一到光棍节,二目无神光,三餐无人问,四季孤影伴,五冬六夏苦,七上八下难,久久光棍汉,十分渴爱怜;11。11。11光棍节,百年难见日,祝你身体安,早得爱人伴,结束单身怨!……菊科杂草有哪些特征菊科,双子叶植物纲,菊亚纲的第一大科。为草本植物。叶常互生,无托叶。头状花序单生或再排成各种花序,外形由一至多层苞片组成的总苞。然而菊科杂草有哪些特征?生物灾害安全小知识……曼联弃儿格林伍德与怀孕伴侣结婚,因为他们被发现在伦敦城市度假格林伍德被发现和他怀孕的伴侣外出并计划与她结婚。这位每周收入75,000英镑的曼联前锋预计将在今年夏天与这名大学生生下第一个孩子。2022年1月,格林伍德的职业生涯一落千……情人节的来历2月14日是西方的情人节。在情人节时,您要是收到点儿什么礼物,一准儿感到太温馨,浪漫之情会油然而生。您要是有了意中人,而平时又没机会或胆量来向对方表达爱意的话,可千万要充分利用……2023第十八届中国黄山(黟县)国际自行车公开赛成功举办!3月25至26日,2023第十八届中国黄山(黟县)国际自行车公开赛在黟县成功举办。赛事以骑行画里乡村感受创意黄山为主题,设置了公路挑战赛、山地越野赛两大项组别,其中山地越……蓉妹妹小剑哥房车旅行之山东人太好客了关注乡土沂蒙,每天用文字向你介绍自媒体网红台前幕后的故事。小剑哥和蓉妹妹都是内蒙人,小剑哥是鄂尔多斯人,蓉妹妹是乌海人。两个人因为相同的爱好,共同自驾房车开始旅游,在旅游……
宋慧乔带火了一种穿法,叫上暗下亮,拎4万手包挺有名媛范儿安卓微信发布8。0。34测试版,加入多个新功能7部法国情爱伦理电影片单,浪漫又激情,脸红心跳的法式爱情人穷时不求三人,不交三友,不做三事磷肥价格趋弱成本仍高部分上市公司毛利承压小知识!如何薅国家的羊毛,从此实现躺赚?世界那么大,凭什么就给你看?巴塞罗那正式发布202223赛季主场球衣寒露将至,无论贫富,记得吃1菜2肉3果,顺应节气身体棒宏伟的战略跨越的足迹3820战略工程实施30周年成就展在榕开好书推荐如何给孩子读绘本联想发布小新Duet2022i51235U12。4英寸2。5

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找