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单元测试框架unittest简明使用实例
Apr 13 Python
python处理二进制数据的方法
Jun 03 Python
python中的全局变量用法分析
Jun 09 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
200行python代码实现2048游戏
Jul 17 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
python3.x中安装web.py步骤方法
Jun 23 Python
使用pandas生成/读取csv文件的方法实例
Jul 09 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
PHP中使用Imagick实现各种图片效果实例
2015/01/21 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
javascript数组的使用
2013/03/28 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
对TensorFlow的assign赋值用法详解
2018/07/30 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
某科技软件测试面试题
2013/05/19 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
村委会贫困证明
2014/01/14 职场文书
信息合作协议书
2014/10/09 职场文书
工程技术员岗位职责
2015/04/11 职场文书
联村联户简报
2015/07/21 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle