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标准库之sqlite3使用实例
Nov 25 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
Python web如何在IIS发布应用过程解析
May 27 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 Python
bat批处理之字符串操作的实现
Mar 16 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
事件模型在各浏览器中存在差异
2010/10/20 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python与php实现分割文件代码
2017/03/06 Python
使用Python对Access读写操作
2017/03/30 Python
python装饰器深入学习
2018/04/06 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Pycharm如何导入python文件及解决报错问题
2020/05/10 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
scrapy头部修改的方法详解
2020/12/06 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
自我推荐书
2013/12/04 职场文书
五一服装活动方案
2014/01/11 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
入党自传范文2015
2015/06/26 职场文书
高中同学会致辞
2015/08/01 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android