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 相关文章推荐
pycharm 使用心得(四)显示行号
Jun 05 Python
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Django入门使用示例
Dec 12 Python
python实现发送邮件功能代码
Dec 14 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
django配置连接数据库及原生sql语句的使用方法
Mar 03 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Python实现socket库网络通信套接字
Jun 04 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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制作简单的内容采集器的代码
2007/11/28 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
用js解决数字不能换行问题
2010/08/10 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
2017/07/21 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
React中使用Vditor自定义图片详解
2020/12/25 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
利用Python绘制数据的瀑布图的教程
2015/04/07 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
python3.5仿微软计算器程序
2020/03/30 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
模具设计与制造专业应届生求职信
2013/10/18 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
法律意见书范文
2015/05/20 职场文书
一个都不能少观后感
2015/06/04 职场文书
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android