python实现二分查找算法


Posted in Python onSeptember 18, 2020

介绍

二分查找也称折半查找(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]

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date  : 2020-07-10
# @Author : 流柯
# @desc : 二分查找算法,python版

def serach(array, t):
  array.sort() #排序,保证列表是有序的
  low = 0
  height = len(array) - 1
  while low <= height:
    k = (low + height) // 2
    if array[k] < t:
      low = k + 1
    elif array[k] > t:
      height = k - 1
    else:
      return k #找到后返回位置
  return -1 #找不到返回-1
array = [1, 3, 5, 7, 9, 6, 8, 0]
print(serach(array, 5))

以上就是python实现二分查找算法的详细内容,更多关于python 二分查找算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python之文字转图片方法
May 10 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
python发送告警邮件脚本
Sep 17 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
python 阶乘累加和的实例
Feb 01 Python
python三引号输出方法
Feb 27 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
wxPython实现画图板
Aug 27 Python
Python中用pyinstaller打包时的图标问题及解决方法
Feb 17 Python
Python自定义sorted排序实现方法详解
Sep 18 #Python
python爬虫爬取网页数据并解析数据
Sep 18 #Python
Python实现迪杰斯特拉算法过程解析
Sep 18 #Python
Python 操作 MySQL数据库
Sep 18 #Python
python实现人工蜂群算法
Sep 18 #Python
Python猫眼电影最近上映的电影票房信息
Sep 18 #Python
python实现简单遗传算法
Sep 18 #Python
You might like
php db类库进行数据库操作
2009/03/19 PHP
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
浅析is_writable的php实现
2013/06/18 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
2016/05/15 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
PyTorch中的C++扩展实现
2020/04/02 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
小学三好学生事迹材料
2014/08/15 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
高中地理教学反思
2016/02/19 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python