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迭代器的使用方法实例
Nov 21 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
python按照多个条件排序的方法
Feb 08 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
python如何实现复制目录到指定目录
Feb 13 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
python实现定时发送邮件
Dec 23 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
合作指挥官:孟斯克
2020/03/16 星际争霸
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
Javascript基础教程之break和continue语句
2015/01/18 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
vue2.0 资源文件assets和static的区别详解
2018/04/08 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
[01:54]胎教DOTA2 准妈妈玩家现身中国区预选赛
2016/06/26 DOTA
python操作日期和时间的方法
2014/03/11 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
python实现括号匹配的思路详解
2018/08/23 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
动态密码技术
2012/10/18 面试题
绩效专员岗位职责
2013/12/02 职场文书
学生党员思想汇报
2013/12/28 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
继承公证书格式
2015/01/26 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python