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 18 Python
Python入门篇之文件
Oct 20 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
python实现单向链表详解
Feb 08 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
Python安装whl文件过程图解
Feb 18 Python
Python 实现将某一列设置为str类型
Jul 14 Python
Django正则URL匹配实现流程解析
Nov 13 Python
Python json解析库jsonpath原理及使用示例
Nov 25 Python
python神经网络学习 使用Keras进行回归运算
May 04 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
global.php
2006/12/09 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
js加强的经典分页实例
2013/03/15 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
在vue里面设置全局变量或数据的方法
2018/03/09 Javascript
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
python正则分析nginx的访问日志
2017/01/17 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
用Python配平化学方程式的方法
2019/07/20 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
python构建指数平滑预测模型示例
2019/11/21 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Python实现EM算法实例代码
2020/10/04 Python
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
创立科技Java面试题
2015/11/29 面试题
中班下学期个人总结
2015/02/12 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
新郎婚礼致辞
2015/07/27 职场文书
2016教师政治学习心得体会
2016/01/23 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
Python Matplotlib库实现画局部图
2021/11/17 Python