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 基础学习第二弹 类属性和实例属性
Aug 27 Python
python list语法学习(带例子)
Nov 01 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
python版学生管理系统
Jan 10 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
python字典一键多值实例代码分享
Jun 14 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python常用数据重复项处理方法
Nov 22 Python
Python中Yield的基本用法
Oct 18 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/01/17 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
Vue下拉框回显并默认选中随机问题
2018/09/06 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
Django stark组件使用及原理详解
2019/08/22 Python
opencv实现简单人脸识别
2021/02/19 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
python 通过邮件控制实现远程控制电脑操作
2020/03/16 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
如何让python的运行速度得到提升
2020/07/08 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
服装设计专业毕业生推荐信
2013/11/09 职场文书
货车司机岗位职责
2014/03/18 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
在人间读书笔记
2015/06/30 职场文书
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript