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实现遍历windows所有窗口并输出窗口标题的方法
Mar 13 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
BP神经网络原理及Python实现代码
Dec 18 Python
python用match()函数爬数据方法详解
Jul 23 Python
python实现按关键字筛选日志文件
Dec 24 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
解决paramiko执行命令超时的问题
Apr 16 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
详解Python中__new__方法的作用
Mar 31 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
PDO::_construct讲解
2019/01/27 PHP
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
给文字加上着重号的JS代码
2013/11/12 Javascript
jquery ajax 局部刷新小案例
2014/02/08 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
2017/03/22 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
2017/09/11 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
浅析Vue实例以及生命周期
2018/08/14 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
如何使用Python 打印各种三角形
2019/06/28 Python
django rest framework vue 实现用户登录详解
2019/07/29 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
几个MySql的面试题
2013/04/22 面试题
会计电算化大学生职业规划书
2014/02/05 职场文书
保密工作实施方案
2014/02/24 职场文书
群众路线党课主持词
2014/04/01 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题