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文件操作相关知识点总结整理
Feb 22 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
Python3中bytes类型转换为str类型
Sep 27 Python
Python英文文本分词(无空格)模块wordninja的使用实例
Feb 20 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
wxpython绘制音频效果
Nov 18 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 Python
python excel多行合并的方法
Dec 09 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
php和asp语法上的区别总结
2019/05/12 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
用JS实现简单的登录验证功能
2017/07/28 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
pandas.read_csv参数详解(小结)
2019/06/21 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
会计专业毕业生推荐信
2013/11/05 职场文书
怎样填写就业意向
2014/04/02 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
教育合作协议范本
2014/10/17 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
严以律己学习心得体会
2016/01/13 职场文书
Python道路车道线检测的实现
2021/06/27 Python