二分查找简单实现

思考:

例一:

如果只是单纯从一个有序非重复的列表中查找某个值是最简单的
但是如果遇到这个列表(非降序)中有重复值,比如[1,2,2,2,3],要找出数组中第一次出现元素2所在的位置,(这里是第1个值)该怎么处理。

下面写一段程序来实现

这里first打错了,懒得改,理解就好

对数组切分,查找中间数是否大于等于待查找数,如果是,记录此时的数值位置,对左边部分再做切分,取中间值,再进行比较,如果小于待查找数,再对右边部分做切分,取中间值。。。最后返回取得的数值位置,即为数组中第一次出现该元素的位置
若要取最后一次出现该元素的位置,同理,只需把记录位置的那条放到else里面。。

例二:

二分查找求方程的根
有函数f(x)=x³-5x²+10x-80=0,求方程的根
若求出的根为a,要求|f(a)|<1e-6(10的-6次方)

注意这里求根,我们需要的并不是带根式的某个具体值,我们只需要得到一个足够精确的实数值
分析:对f(x)求导,得知导数恒大于0,即该函数单调递增,可以使用二分查找得到方程的根,由函数式易知f(0)<0,f(100)>0,即方程的根在0到100之间,下面写一段程序:



定义函数f(x),设置0到100的范围,root表示取中点,只要求的函数值的绝对值大于设定的范围10的-6次方,就一直循环,当y>0时,对左半部分取中间值,如果不是,反之,循环一次更新一次root和y并记录次数,直到跳出循环,打印root和循环次数
显然这里只做了32次循环就达到预期结果
如果使用顺序查找,则需要从10的-6次方开始查找,每次加10的-6次方,直到找到根,这里的循环次数显然太多了,由此可见二分查找在解决某些问题的时候,显示出了非常高的效率

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,774评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,280评论 19 139
  • 子平真诠 滴天髓阐微 穷通宝鉴 渊海子平 易经 心经 金刚经 六祖坛经 地藏经 圆觉经 楞严经 胜蔓经 金刚经说什...
    惞若阅读 1,306评论 0 0
  • 有时候的安静, 是风的无声, 有时候的安静 是人的沉默 又或者是悲伤的沉重 低于二十赫兹 也许是孤单的无言 超过了...
    陈年的旧事莫重提阅读 2,166评论 0 3
  • 记者提到的真相,多半是指那些与公共利益相关的被当事人极力掩盖的事实,因此在今天的记者节各种社论与议论中,似乎只有从...
    車鉴阅读 1,477评论 0 1

友情链接更多精彩内容