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处理圆角图片、圆形图片的例子
Apr 25 Python
讲解Python中的标识运算符
May 14 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Python3生成手写体数字方法
Jan 30 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python多进程与服务器并发原理及用法实例分析
Aug 21 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python callable内置函数原理解析
Mar 05 Python
Python的历史与优缺点整理
May 26 Python
pytorch 查看cuda 版本方式
Jun 23 Python
python中的对数log函数表示及用法
Dec 09 Python
Python图像处理之图像拼接
Apr 28 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使用codebase生成随机数
2014/03/25 PHP
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
[45:38]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第一局
2016/03/02 DOTA
python创建和使用字典实例详解
2013/11/01 Python
Python中实现对list做减法操作介绍
2015/01/09 Python
Python中常用信号signal类型实例
2018/01/25 Python
pytorch 数据集图片显示方法
2018/07/26 Python
python从入门到精通 windows安装python图文教程
2019/05/18 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
python实现在多维数组中挑选符合条件的全部元素
2019/11/26 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
出国考察邀请函
2014/01/21 职场文书
20年同学聚会感言
2014/02/03 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
公司人事专员岗位职责
2014/08/11 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
小学少先队活动总结
2015/05/08 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python