如果有这样一个列表,让你从这个列表中找到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么?

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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]

二分查找法的前提是必须是有序的,且没有重复元素的列表。

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

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

这就是二分查找算法

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

简单版二分法

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
list1 = [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 func1(l, aim):if l and aim in l:mid = (len(l) - 1) // 2  # mid为取中数字的索引if aim > l[mid]:func1(l[mid + 1:], aim)elif aim < l[mid]:func1(l[:mid], aim)elif aim == l[mid]:print("bingo", aim)else:print("此数字不在列表中")else:print("找不到")func1(list1, 36)

升级版二分法

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))

Python 二分查找算法相关推荐

  1. Python二分查找算法

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

  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. 有望替代卷积神经网络?微软最新研究提基于关系网络的视觉建模
  2. 数据科学家所需的大脑训练
  3. 雷林鹏分享:PHP 魔术常量
  4. 对抽象工厂+反射+配置文件的实例理解
  5. ajax请求php保存数据格式,jQuery ajax与php进行数据交互(数据格式问题)
  6. ITK:就地过滤图像
  7. cfF. Boring Queries
  8. ie8 html 语音标签,让IE8支持html5中的video标签
  9. Visual studio 2022 常用快捷键
  10. 《一梦江湖》(原楚留香)游戏拆解分析(一)
  11. c语言为什么要使用short类型,为什么c语言中short的表示范围是-32768~32767?(转)...
  12. html div虚线背景,聊聊css绘制虚线
  13. 简单易懂的方式去看C语言精华--指针
  14. Linux下设置MTU值到9000
  15. ASCII与Unicode编码消息写文件浅析
  16. 智能手机丢失照片如何恢复
  17. 《星际迷航 超越星辰》
  18. 多位点序列分型_bionumerics应用16-全基因多位点序列分型(wgMLST)
  19. 12操作系统面临的安全威胁安全脆弱性基本概念
  20. 直男七夕送礼指南,这四款总有你女票的菜

热门文章

  1. 技术开发人员适应其他部门提需求的一个经验
  2. Windows查看网络端口被占用情况netstat命令
  3. 【转】在CSS中 ID与Class的区别?谢谢
  4. VMware View 5万点虚拟桌面项目案例详析
  5. SAP的资产负债表、损益表的利润体现
  6. 去除SAP中的一些特殊字符
  7. 2014款新宝来车引擎盖开关在哪里
  8. openSAP中国新平台的介绍
  9. 函数模块:CTVB_COMPARE_TABLES
  10. 文件头_常见文件文件头