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查找相似单词的方法
Mar 05 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
python中字典增加和删除使用方法
Sep 30 Python
Opencv 图片的OCR识别的实战示例
Mar 02 Python
Python中tkinter的用户登录管理的实现
Apr 22 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异步执行的常用方式详解
2013/06/03 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
jquery更换文章内容与改变字体大小代码
2013/09/30 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
Python json模块使用实例
2015/04/11 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
Python如何调用JS文件中的函数
2019/08/16 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
校庆口号
2014/06/20 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
用人单位聘用意向书
2015/05/11 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB