python中二分查找法的实现方法


Posted in Python onDecember 06, 2020

如果想要在有序数据中进行查找想要的数据,二分查找法就个好方法,它可以大大缩短了搜索时间,是一种常见的查找方法。二分查找很好写,却很难写对,下面,小编就简单向大家介绍一下二分查找,并演示器使用代码。

1、二分查找

在一个有序并且无重复的列表中,对该列表的元素进行查找。

2、特点

(1)必须针对于有序列表

(2)该列表必须无重复

(3)按下标索引查找

3、使用方法

非递归实现:

def binary_search(alist, item):
  """二分查找 非递归方式"""
  n = len(alist)
  start = 0
  end = n - 1
  while start <= end:
    mid = (start + end) // 2
    if alist[mid] == item:
      return True
    elif item < alist[mid]:
      end = mid - 1
    else:
      start = mid + 1
  return False

if __name__ == '__main__':
  li = [17, 20, 26, 31, 44, 54, 55, 77, 93]
  # print(binary_search(li, 55))
  # print(binary_search(li, 100))

递归实现:

def binary_search_2(alist, item):
  """二分查找 递归方式"""
  n = len(alist)
  if 0 == n:
    return False
  mid = n // 2
  if alist[mid] == item:
    return True
  elif item < alist[mid]:
    return binary_search_2(alist[:mid], item)
  else:
    return binary_search_2(alist[mid + 1:], item)
if __name__ == '__main__':
  li = [17, 20, 26, 31, 44, 54, 55, 77, 93]
  # print(binary_search(li, 55))
  # print(binary_search(li, 100))

基础知识点扩展:

介绍

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

前提

必须待查找的序列有序

时间复杂度

O(log2n)

原理

1)确定该期间的中间位置K

2)将查找的值t与array[k]比较,若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。

3)区域确定过程:

若array[k]>t,由于数组有序,所以array[k,k+1,……,high]>t;故新的区间为array[low, ..., K-1];

反之,若array[k]<t对应查找区间为array[k+1, ..., high]

到此这篇关于python中二分查找法的实现方法的文章就介绍到这了,更多相关python中二分查找法如何实现内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
python做接口测试的必要性
Nov 20 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
Mar 25 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
用opencv给图片换背景色的示例代码
Jul 08 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
python 模拟登陆github的示例
Dec 04 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 Python
python中判断数字是否为质数的实例讲解
Dec 06 #Python
Django搭建项目实战与避坑细节详解
Dec 06 #Python
python温度转换华氏温度实现代码
Dec 06 #Python
python openssl模块安装及用法
Dec 06 #Python
python help函数实例用法
Dec 06 #Python
python中复数的共轭复数知识点总结
Dec 06 #Python
pycharm + django跨域无提示的解决方法
Dec 06 #Python
You might like
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
php插入排序法实现数组排序实例
2015/02/16 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
EXT中xtype的含义分析
2010/01/07 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
python 随机森林算法及其优化详解
2019/07/11 Python
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
自我检讨书范文
2015/01/28 职场文书
研讨会通知
2015/04/27 职场文书
学校就业保障协议书
2019/06/24 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
使用python求解迷宫问题的三种实现方法
2022/03/17 Python