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 访问静态文件出现404或500错误
Jan 20 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
python实现梯度下降算法
Mar 24 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
pandas取出重复数据的方法
Jul 04 Python
python中如何实现将数据分成训练集与测试集的方法
Sep 13 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
python plotly画柱状图代码实例
Dec 13 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
django rest framework serializers序列化实例
May 13 Python
Django Model中字段(field)的各种选项说明
May 19 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
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python中遍历列表的方法总结
2019/06/27 Python
python和c语言的主要区别总结
2019/07/07 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
会计求职信
2014/05/29 职场文书
施工质量承诺书范文
2014/05/30 职场文书
十周年庆典策划方案
2014/06/03 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js