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实现定时播放mp3
Mar 29 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
python获取文件真实链接的方法,针对于302返回码
May 14 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
Python datetime包函数简单介绍
Aug 28 Python
python实现拼接图片
Mar 23 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
Yii分页用法实例详解
2014/12/04 PHP
浅谈javascript对象模型和function对象
2014/12/26 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
Angularjs cookie 操作实例详解
2017/09/27 Javascript
React如何避免重渲染
2018/04/10 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
数控专业大学生的自我鉴定
2013/11/13 职场文书
房屋改造计划书
2014/01/10 职场文书
运动会稿件300字
2014/02/14 职场文书
陈欧的广告词
2014/03/18 职场文书
我的求职择业计划书
2014/04/04 职场文书
应届生求职自荐信范文
2014/04/07 职场文书
诚信考试倡议书
2014/04/15 职场文书
标准毕业生自荐信
2014/06/24 职场文书
护理专业自荐信范文
2015/03/06 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
Python开发五子棋小游戏
2022/05/02 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript