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生成随机验证码(中文验证码)示例
Apr 03 Python
python修改注册表终止360进程实例
Oct 13 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
python:socket传输大文件示例
Jan 18 Python
带你了解python装饰器
Jun 15 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
对Python中画图时候的线类型详解
Jul 07 Python
Django中URL的参数传递的实现
Aug 04 Python
python中常见错误及解决方法
Jun 21 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
Protoss兵种对照表
2020/03/14 星际争霸
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
初学Python函数的笔记整理
2015/04/07 Python
python实现连接mongodb的方法
2015/05/08 Python
python中base64加密解密方法实例分析
2015/05/16 Python
简单易懂的python环境安装教程
2017/07/13 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python实现支付宝转账接口
2019/05/07 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书