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之眼花缭乱的运算符
Sep 14 Python
用C++封装MySQL的API的教程
May 06 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python装饰器基础概念与用法详解
Dec 22 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
基于python读取.mat文件并取出信息
Dec 16 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python获取指定网段正在使用的IP
Dec 14 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 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
基于文本的搜索
2006/10/09 PHP
php不用正则验证真假身份证
2013/11/06 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
javascript基本算法汇总
2016/03/09 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
原生JavaScript实现刮刮乐
2020/09/29 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
跟老齐学Python之Python文档
2014/10/10 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
python实现抽奖小程序
2020/04/15 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Python转换时间的图文方法
2019/07/01 Python
python之拟合的实现
2019/07/19 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
python 负数取模运算实例
2020/06/03 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python属于哪种语言
2020/08/16 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
装修致歉信
2014/01/15 职场文书
刑事上诉状范文
2015/05/22 职场文书