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获取Windows或Linux主机名称通用函数分享
Nov 22 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
Linux系统(CentOS)下python2.7.10安装
Sep 26 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
pyspark 随机森林的实现
Apr 24 Python
python属于解释语言吗
Jun 11 Python
python代码区分大小写吗
Jun 17 Python
Django中Aggregation聚合的基本使用方法
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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
vue-axios使用详解
2017/05/10 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
[47:55]Ti4第二日主赛事败者组 NaVi vs EG 1
2014/07/20 DOTA
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
python 列表降维的实例讲解
2018/06/28 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
Guess欧洲官网:美国服饰品牌
2019/08/06 全球购物
技校毕业生个人学习的自我评价
2014/02/21 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
司法所长先进事迹
2014/06/02 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers