python二分法查找算法实现方法【递归与非递归】


Posted in Python onDecember 06, 2019

本文实例讲述了python二分法查找算法实现方法。分享给大家供大家参考,具体如下:

二分法查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

二分法查找实现

(非递归实现)

def binary_search(alist, item):
  first = 0
  last = len(alist)-1
  while first<=last:
    midpoint = (first + last)/2
    if alist[midpoint] == item:
      return True
    elif item < alist[midpoint]:
      last = midpoint-1
    else:
      first = midpoint+1
  return False
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))

(递归实现)

def binary_search(alist, item):
  if len(alist) == 0:
    return False
  else:
    midpoint = len(alist)//2
    if alist[midpoint]==item:
      return True
    else:
      if item<alist[midpoint]:
        return binary_search(alist[:midpoint],item)
      else:
        return binary_search(alist[midpoint+1:],item)
testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
print(binary_search(testlist, 3))
print(binary_search(testlist, 13))

运行结果:

False
True

时间复杂度

  • 最优时间复杂度:O(1)
  • 最坏时间复杂度:O(logn)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python查找相似单词的方法
Mar 05 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
Python mutiprocessing多线程池pool操作示例
Jan 30 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
python中嵌套函数的实操步骤
Feb 27 Python
pytorch 自定义卷积核进行卷积操作方式
Dec 30 Python
Python semaphore evevt生产者消费者模型原理解析
Mar 18 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 Python
python二维键值数组生成转json的例子
Dec 06 #Python
python加载自定义词典实例
Dec 06 #Python
Python 词典(Dict) 加载与保存示例
Dec 06 #Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 #Python
django formset实现数据表的批量操作的示例代码
Dec 06 #Python
Python手绘可视化工具cutecharts使用实例
Dec 05 #Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 #Python
You might like
深入探讨PHP中的内存管理问题
2011/08/31 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
php数组指针操作详解
2017/02/14 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
用python 制作图片转pdf工具
2015/01/30 Python
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
python Django的web开发实例(入门)
2019/07/31 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python