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中的floor()方法
May 15 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Win8下python3.5.1安装教程
Jul 29 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
详解python中的hashlib模块的使用
Apr 22 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
python绘制汉诺塔
Mar 01 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
header()函数使用说明
2006/11/23 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
php简单截取字符串代码示例
2016/10/19 PHP
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
jQuery中ajax的get()方法用法实例
2014/12/26 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
对python模块中多个类的用法详解
2019/01/10 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
python 循环数据赋值实例
2019/12/02 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
python Scrapy框架原理解析
2021/01/04 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
前端实现打印图像功能
2019/08/27 HTML / CSS
全球工业:Global Industrial
2020/02/01 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
Unix如何添加新的用户
2014/08/20 面试题
在职研究生自我鉴定
2013/10/16 职场文书
小学运动会口号
2014/06/07 职场文书
2015年计生工作总结范文
2015/04/24 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
尝试使用Python爬取城市租房信息
2022/04/12 Python