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 22 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
python 异或加密字符串的实例
Oct 14 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
对python中UDP,socket的使用详解
Aug 22 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
Python制作一个随机抽奖小工具的实现
Jul 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实现的常见排序算法汇总
2014/09/08 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
javascript 新浪背投广告实现代码
2009/07/07 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
详细分析JS函数去抖和节流
2017/12/05 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
python实现机器人行走效果
2018/01/29 Python
Python聊天室程序(基础版)
2018/04/01 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
Python实现多进程的四种方式
2019/02/22 Python
python 获取等间隔的数组实例
2019/07/04 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
银行会计业务的个人自我评价
2013/11/02 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
公司委托书格式
2014/08/01 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
环境卫生标语
2015/08/03 职场文书