楔子

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

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

升级版二分法

def search(num,l,start=None,end=None):

start = start if start else 0

end = end if end is None else len(l) - 1

mid = (end - start)//2 + start

if start > end:

return None

elif l[mid] > num :

return search(num,l,start,mid-1)

elif l[mid] < num:

return search(num,l,mid+1,end)

elif l[mid] == num:

return mid

python二分法查找算法_python之路-二分法查找相关推荐

  1. python二分法查找算法_顺序查找算法和折半(二分法)查找算法,C语言查找算法详解...

    查找是指在大量的信息中寻找一个特定的信息.在计算机中,查找是非常重要的一个应用,比如"百度".查找算法的好坏直接影响查找的速度. 常用的查找算法主要有顺序查找和折半(二分法)查找: ...

  2. Python查找算法(三)------ 插值查找

    算法简介 插值查找时根据要查找的关键字key与查找表中最大最小记录的关健字比较后的查找方法. 其核心就在于插值的计算公式: (key-a[low])/(a[high]-a[low])*(high-lo ...

  3. php折半查找算法,PHP如何实现折半查找算法

    本文主要介绍了PHP实现的折半查找算法,简单描述了折半查找的原理,并结合实例形式分析了php采用递归与非递归方式实现折半查找算法的相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 定义:折半查找 ...

  4. 查找算法4——基于树的查找

    基于树的查找 基于树的查找法就是把待查找的表组织成树形结构再进行查找的方法.基于树的查找最常用的是基于二叉树的查找. 二叉排序树的创建和插入操作 编写算法,要求根据一个元素序列创建一棵二叉排序树,并将 ...

  5. python 查找算法_python快速查找算法应用实例

    文实例讲述了Python快速查找算法的应用,分享给大家供大家参考. 具体实现方法如下: import random def partition(list_object,start,end): rand ...

  6. python中顺序查找法例子_Python查找算法(一)------ 顺序查找

    查找算法  --  简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由用一类型的数据元素构成的集合 关健字( ...

  7. python文字识别算法_Python图像处理之图片文字识别(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几 ...

  8. python求素数算法_Python程序最多可计算n个质数(使用不同算法)

    python求素数算法 There are various methods through which we can calculate prime numbers upto n. 我们可以通过多种方 ...

  9. python k近邻算法_python中的k最近邻居算法示例

    python k近邻算法 K最近邻居(KNN) (K-Nearest Neighbors (KNN)) KNN is a supervised machine learning algorithm t ...

最新文章

  1. C语言局部搜索算法(爬山法,模拟退火法,遗传算法)求解八皇后问题
  2. 解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团)
  3. 3164 质因数分解
  4. C宏定义中的##,#,#@用法介绍
  5. MySQL条件运算符的使用
  6. BugkuCTF-PWN题pwn1-瑞士军刀
  7. 黑马程序员-JAVA高级视频_IO输入与输出-20天-9(切割合并文件)
  8. golang和C的输出格式化对齐
  9. 【转】【真正福利】成为专业程序员路上用到的各种优秀资料、神器及框架
  10. linux 虚拟机 网络打印机,Fedora 17中实现虚拟机共享host虚拟打印机
  11. python列表元素可以重复吗_Python列表中的元素重复
  12. js 格式化prettier配置_Prettier 代码格式化插件 -- 配置翻译
  13. 前后端分离页面500错误,控制台不打印错误日志的错误定位
  14. 【许晓笛】 EOS智能合约案例解析(1) 1
  15. 电脑开不了机 ,怎么解决?
  16. Vue:自定义组件引入单页面+动态绑定图片
  17. VUE购物车小案例—vue指令的综合应用
  18. 手机游戏真的那么好赚钱吗?
  19. C++实现的利用LR(1)分析表对赋值表达式进行语法制导翻译生成四元式及汇编代码
  20. IDE硬盘的容量限制

热门文章

  1. 如何做好应急响应工作?常见应急响应流程
  2. 来看看CDN网络安全防护的方案
  3. c++11 变长参数的使用(制作一个多参数多类型求和函数)
  4. Intel VT学习笔记(四)—— VMCS(下)
  5. 设计模式C++实现(9)——享元模式
  6. 5.SEH(结构化异常处理)
  7. MySql 查询时 为NULL 设置默认值
  8. 1.6 为什么使用向上转型而不直接创建子类对象?
  9. Acwing第 13 场周赛【未完结】
  10. 线性代数 第一章 行列式