二分查找算法

如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你说,so easy!

l.index(66)...

我们之所以用index方法可以找到,是因为python帮我们实现了查找方法。如果,index方法不给你用了。。。你还能找到这个66么?

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]i = 0
for num in l:if num == 66:print(i)i+=1

上面这个方法就实现了从一个列表中找到66所在的位置了。

但我们现在是怎么找到这个数的呀?是不是循环这个列表,一个一个的找的呀?假如我们这个列表特别长,里面好好几十万个数,那我们找一个数如果运气不好的话是不是要对比十几万次?这样效率太低了,我们得想一个新办法。

二分查找算法

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

你观察这个列表,这是不是一个从小到大排序的有序列表呀?

如果这样,假如我要找的数比列表中间的数还大,是不是我直接在列表的后半边找就行了?

这就是二分查找算法

那么落实到代码上我们应该怎么实现呢?

简单版二分法

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]def func(l,aim):mid = (len(l)-1)//2if l:if aim > l[mid]:func(l[mid+1:],aim)elif aim < l[mid]:func(l[:mid],aim)elif aim == l[mid]:print("bingo",mid)else:print('找不到')
func(l,66)
func(l,6)

升级版二分法

l1 = [1, 2, 4, 5, 7, 9]
def two_search(l,aim,start=0,end=None):end = len(l)-1 if end is None else endmid_index = (end - start) // 2 + startif end >= start:if aim > l[mid_index]:return two_search(l,aim,start=mid_index+1,end=end)elif aim < l[mid_index]:return two_search(l,aim,start=start,end=mid_index-1)elif aim == l[mid_index]:return mid_indexelse:return '没有此值'else:return '没有此值'
print(two_search(l1,9))

转载于:https://www.cnblogs.com/Big-Dinosaur/p/10465869.html

Python二分查找算法相关推荐

  1. Python 二分查找算法

    如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76 ...

  2. python二分查找算法_如何使用python的二分查找算法

    如何使用python的二分查找算法 发布时间:2020-11-18 09:27:29

  3. python折半查找算法_跟黄哥学python序列文章之python二分查找算法

    在计算机科学中,二分查找算法(binary search).也称折半搜索(英语:half-interval search), 二分搜索法.二分搜索.二分探索,是一种在有序数组中查找某一特定元素的搜索算 ...

  4. python 二分查找算法实现

    给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1 二分查找算法的时间复杂度是O( ...

  5. python 二分查找算法_Python实现二分查找法

    用Python来实现二分查找 1.问题需求 输入列表[1,4,4,5,7,7,8,9,9,10]和目标整数1,输出其所在的位置为0,即第1次出现在第0个位置.输入列表[1,2,3,3,4,5,10]和 ...

  6. python --- 二分查找算法

    二分查找法:在我的理解中这个查找方法为什么会叫二分呢,我认为是将要查询的一个列表分成了两份,然后在利用某个值来进行比较,在一个不断循环的过程中来找出我们要找的某一个值. 废话不多说,先上代码: 1 d ...

  7. python实现二分查找算法_两种方法实现Python二分查找算法

    一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number: print(" ...

  8. python递归实现二分查找_python二分查找算法的递归实现

    本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 ...

  9. python递归实现二分查找_python二分查找算法的递归实现方法

    本文实例讲述了python二分查找算法的递归实现方法.分享给大家供大家参考,具体如下: 这里先提供一段二分查找的代码: def binarySearch(alist, item): first = 0 ...

最新文章

  1. svn: E215004: Authentication failed
  2. VS2013安装OpenCV4.1版本并搭建一个小程序
  3. Oracle 游标(cursor) 说明
  4. mysql 过程 的函数的区别是什么意思_Mysql中存储过程和函数的区别是什么
  5. python turtle库画椭圆_如何用Python画一只肥肥的柯基狗狗——turtle库绘制椭圆与弧线实践...
  6. MongoDB 教程八(结语): 一网打尽当下NoSQL类型、适用场景及使用公司
  7. LG_2051_[AHOI2009]中国象棋
  8. 佳能80d有人脸识别吗_2020单反/微单相机推荐,单反和微单(无反)选购攻略,佳能、尼康、索尼、富士、松下相机...
  9. umbrello 用户手册_别克君威车主必备:君威用户手册|君威使用说明书电子版|君威保养手册_搜狐汽车...
  10. Vue Element校验validate
  11. day22 正则表达式 re
  12. mysql 数据库安装命令_Mysql数据库的安装
  13. C语言基础选择题100道(附答案)02
  14. 简单的摄像头自写驱动程序总结
  15. 阿里巴巴天猫总裁蒋凡被认定为杭州高层次人才
  16. Andromeda 源码解析 (同步获取服务)
  17. 【English Training】Green Economy and Trade
  18. 拉格朗日乘子法:写得很通俗的文章
  19. 联想新一体机旁边的 USB 口插上没反应
  20. 移动机器人定位(amcl)

热门文章

  1. 彻底完全卸载 SQL Server 2005 的图文教程
  2. 多模块Maven工程单独打包某一模块工程
  3. 【原创】linux 批量清空文本内容
  4. 合并多个wordpress到一个
  5. 设计模式学习笔记 1.介绍
  6. 基于区域的OSPF简单口令认证(cisco packet tracer5.3)
  7. webapi------宿主程序
  8. 【bzoj2693】jzptab 莫比乌斯反演+线性筛
  9. php-css外边距
  10. PHP程序员学习路线