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的Django框架的运行方式及处理流程
Apr 08 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
详解Django admin高级用法
Nov 06 Python
python实现扫雷小游戏
Apr 24 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
PHP图片上传类带图片显示
2006/11/25 PHP
php中常用编辑器推荐
2007/01/02 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
jquery的键盘事件修改代码
2011/02/24 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
简单了解python协程的相关知识
2019/08/31 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
若通过ObjectOutputStream向一个文件中多次以追加方式写入object,为什么用ObjectInputStream读取这些object时会产生StreamCorruptedException?
2016/10/17 面试题
素质拓展感言
2014/01/29 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL