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算法学习之桶排序算法实例(分块排序)
Dec 18 Python
Python中的字典遍历备忘
Jan 17 Python
使用python绘制常用的图表
Aug 27 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
pandas删除指定行详解
Apr 04 Python
keras 特征图可视化实例(中间层)
Jan 24 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
使用Keras建立模型并训练等一系列操作方式
Jul 02 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 Python
关于 Python json中load和loads区别
Nov 07 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之static静态属性与静态方法实例分析
2015/07/30 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
javascript数组组合成字符串的脚本
2021/01/06 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
js实现在文本框光标处添加字符的方法介绍
2012/11/24 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
vue中关闭eslint的方法分析
2018/08/04 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
python中查看变量内存地址的方法
2015/05/05 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
解析python实现Lasso回归
2019/09/11 Python
python中如何写类
2020/06/29 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
电子商务专业个人的自我评价
2013/12/19 职场文书
十佳教师事迹材料
2014/01/11 职场文书
天网工程实施方案
2014/03/26 职场文书
五一促销活动总结
2014/07/01 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书