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 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
跟老齐学Python之类的细节
Oct 13 Python
python获取远程图片大小和尺寸的方法
Mar 26 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
Python使用SQLite和Excel操作进行数据分析
Jan 20 Python
Python使用pylab库实现绘制直方图功能示例
Jun 01 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
详解Python发送email的三种方式
Oct 18 Python
Python hmac模块使用实例解析
Dec 24 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 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
4.与数据库的连接
2006/10/09 PHP
PHP中的extract的作用分析
2008/04/09 PHP
必须收藏的php实用代码片段
2016/02/02 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
python实现简单的TCP代理服务器
2014/10/08 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python实现堆排序的方法详解
2016/05/03 Python
Django中url的反向查询的方法
2018/03/14 Python
python调用摄像头拍摄数据集
2019/06/01 Python
python tkinter组件摆放方式详解
2019/09/16 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
scrapy-splash简单使用详解
2021/02/21 Python
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
自荐书封面下载
2013/11/29 职场文书
企事业单位求职者的自我评价
2013/12/28 职场文书
信息工作经验交流材料
2014/05/28 职场文书
个人工作保证书
2015/02/28 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
新手入门Mysql--概念
2021/06/18 MySQL
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript