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使用新浪微博API发送微博的例子
Apr 10 Python
Python中逗号的三种作用实例分析
Jun 08 Python
Python 爬虫图片简单实现
Jun 01 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python爬虫基本知识
Mar 05 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
python使用列表的最佳方案
Aug 12 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 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 数组遍历顺序理解
2009/09/09 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
PHP 转义使用详解
2013/07/15 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
理解javascript模块化
2016/03/28 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
详解如何在angular2中获取节点
2017/11/23 Javascript
详解React中setState回调函数
2018/06/14 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
python之django母板页面的使用
2018/07/03 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
如何基于python实现归一化处理
2020/01/20 Python
python实现最短路径的实例方法
2020/07/19 Python
python 利用toapi库自动生成api
2020/10/19 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
医科大学生的自我评价
2013/12/04 职场文书
党性观念心得体会
2014/09/03 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书