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 相关文章推荐
在Django的form中使用CSS进行设计的方法
Jul 18 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
tensorflow实现简单的卷积神经网络
May 24 Python
python 设置输出图像的像素大小方法
Jul 04 Python
解决yum对python依赖版本问题
Jul 05 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
Python数学形态学实例分析
Sep 06 Python
flask框架自定义url转换器操作详解
Jan 25 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
python中pdb模块实例用法
Jan 15 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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 一维数组的循环遍历实现代码
2017/04/10 PHP
javascript 打印内容方法小结
2009/11/04 Javascript
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
Python中的super用法详解
2015/05/28 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
英国家电直销:Appliances Direct
2016/09/22 全球购物
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
小学国庆节活动方案
2014/02/11 职场文书
2014年协会工作总结
2014/11/22 职场文书
丧事答谢词大全
2015/09/30 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
pytorch 实现多个Dataloader同时训练
2021/05/29 Python