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 相关文章推荐
在Django的模型中添加自定义方法的示例
Jul 21 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
python实现日志按天分割
Jul 22 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
python图像处理模块Pillow的学习详解
Oct 09 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
TensorFlow实现checkpoint文件转换为pb文件
Feb 10 Python
如何理解Python中的变量
Jun 01 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
Python通过len函数返回对象长度
Oct 22 Python
Python 中 sorted 如何自定义比较逻辑
Feb 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
javascript常用函数(1)
2015/11/04 Javascript
理解javascript封装
2016/02/23 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
浅谈super-vuex使用体验
2018/06/25 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
python查询sqlite数据表的方法
2015/05/08 Python
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python语言快速上手学习方法
2018/12/14 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
法律七进实施方案
2014/03/15 职场文书
校企合作协议书
2014/04/16 职场文书
大学生入党群众意见书
2015/06/02 职场文书
Nginx服务器如何设置url链接
2021/03/31 Servers
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript
Redis过期数据是否会被立马删除
2022/07/23 Redis