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框架加载模版的方式
Jul 20 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
OpenCV 模板匹配
Jul 10 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
Python bytes string相互转换过程解析
Mar 05 Python
Anconda环境下Vscode安装Python的方法详解
Mar 29 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 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基础知识:控制结构
2006/12/13 PHP
MySQL数据源表结构图示
2008/06/05 PHP
php 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
js获取变量
2006/08/24 Javascript
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python数组遍历的简单实现方法小结
2016/04/27 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
婚纱摄影师求职信
2014/03/07 职场文书
捐书活动总结
2014/05/04 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
大学生暑假实习总结
2015/07/13 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
Python中的程序流程控制语句
2022/02/24 Python