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 open读写文件实现脚本
Sep 06 Python
Python处理XML格式数据的方法详解
Mar 21 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
python 爬取疫情数据的源码
Feb 09 Python
Python openpyxl 插入折线图实例
Apr 17 Python
如何在django中实现分页功能
Apr 22 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
python实现MD5进行文件去重的示例代码
Jul 09 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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中设置多级目录session的问题
2011/08/08 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
python简单分割文件的方法
2015/07/30 Python
python如何修改装饰器中参数
2018/03/20 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
继电保护工岗位职责
2014/01/05 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
追悼会答谢词范文
2015/09/29 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
解决golang 关于全局变量的坑
2021/05/06 Golang
如何用Navicat操作MySQL
2021/05/12 MySQL