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编程入门的一些基本知识
May 13 Python
Python探索之自定义实现线程池
Oct 27 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python输出指定字符串的方法
Feb 06 Python
python序列类型种类详解
Feb 26 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
Python logging模块handlers用法详解
Aug 14 Python
Python趣味挑战之实现简易版音乐播放器
May 28 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
PHP 中常量的知识整理
2017/04/14 PHP
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
Vue formData实现图片上传
2019/08/20 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
餐饮业创业计划书范文
2014/01/06 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
学校地质灾害防治方案
2014/06/10 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
工作证明格式范文
2015/06/15 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android