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查询mysql中文乱码问题
Nov 09 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
对numpy中轴与维度的理解
Apr 18 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
Python装饰器基础概念与用法详解
Dec 22 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
Django model重写save方法及update踩坑详解
Jul 27 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
Python Selenium异常处理的实例分析
Feb 28 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生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
Javascript 继承机制的实现
2009/08/12 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
Vue点击切换Class变化,实现Active当前样式操作
2020/07/17 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python和bash统计CPU利用率的方法
2015/07/10 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python实现的自动发送消息功能详解
2019/08/15 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
安全施工标语
2014/06/07 职场文书
北京故宫的导游词
2015/01/31 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
PHP判断是否是json字符串
2021/04/01 PHP