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中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
python学习之编写查询ip程序
Feb 27 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
python判断自身是否正在运行的方法
Aug 08 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
Feb 24 Python
TensorFlow Autodiff自动微分详解
Jul 06 Python
Python爬虫爬取微信朋友圈
Aug 06 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
详解pandas apply 并行处理的几种方法
Feb 24 Python
python读取mat文件生成h5文件的实现
Jul 15 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/06/09 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
AngularJS实现tab选项卡的方法详解
2017/07/05 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
微信小程序实现时间戳格式转换
2020/07/20 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python使用tkinter实现简单计算器
2018/01/30 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
高中生毕业自我鉴定范文
2013/12/22 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
《白鹅》教学反思
2014/04/13 职场文书
法学求职信
2014/06/22 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
解析MySQL索引的作用
2022/03/03 MySQL
Echarts如何重新渲染实例详解
2022/05/30 Javascript
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers