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执行子进程实现进程间通信的方法
Jun 02 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
Jul 11 Python
Python 函数基础知识汇总
Mar 09 Python
python3实现随机数
Jun 25 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
Python多线程threading模块用法实例分析
May 22 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
Jan 06 Python
Python中Qslider控件实操详解
Feb 20 Python
python 如何在list中找Topk的数值和索引
May 20 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和ACCESS写聊天室(四)
2006/10/09 PHP
PHP新手上路(五)
2006/10/09 PHP
php目录操作实例代码
2014/02/21 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
写一个方法1000的阶乘
2012/11/21 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
汽车转让协议书范本
2014/12/07 职场文书
邀请函范文
2015/02/02 职场文书