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 fileinput模块使用介绍
Nov 30 Python
Python3学习urllib的使用方法示例
Nov 29 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
Python简单实现网页内容抓取功能示例
Jun 07 Python
python3使用QQ邮箱发送邮件
May 20 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
python简单验证码识别的实现过程
Jun 20 Python
Python中基础数据类型 set集合知识点总结
Aug 02 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应用实例 登录验证
2009/03/16 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
Python3数字求和的实例
2019/02/19 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
主要的Ajax框架都有什么
2013/11/14 面试题
《金钱的魔力》教学反思
2014/02/24 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
使用python创建股票的时间序列可视化分析
2022/03/03 Python
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers