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 的 with 语句详解
Jun 13 Python
用Python解决计数原理问题的方法
Aug 04 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python内置模块turtle绘图详解
Dec 09 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
Python合并多个Excel数据的方法
Jul 16 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
Jul 22 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
python Django 反向访问器的外键冲突解决
May 20 Python
基于python调用jenkins-cli实现快速发布
Aug 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
php使用Imagick生成图片的方法
2015/07/31 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
javascript自执行函数
2017/02/10 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
探讨Vue.js的组件和模板
2017/10/27 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
小程序实现左滑删除功能
2018/10/30 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
Python使用ntplib库同步校准当地时间的方法
2016/07/02 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Flask之请求钩子的实现
2018/12/23 Python
python操作kafka实践的示例代码
2019/06/19 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
python中下标和切片的使用方法解析
2019/08/27 Python
pytorch标签转onehot形式实例
2020/01/02 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
ABOUT YOU罗马尼亚:超过600个时尚品牌
2019/09/19 全球购物
大学生收银员求职信分享
2014/01/02 职场文书
公司租房协议书范本
2014/10/08 职场文书
离婚协议书范文
2015/01/26 职场文书
青年联谊会致辞
2015/07/31 职场文书
Python 如何安装Selenium
2021/05/06 Python