用python实现二分查找(折半查找)

2023-11-10

一、算法简介

折半查找又叫二分查找,要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列(升序或者降序)。

  • 时间复杂度:O(log2n)
    每次循环都会舍弃一半的查找空间。
  • 空间复杂度:O(1)
    使用一个整型变量mid记录中间的值。

二、算法思路

需要用到三个指针:low,high,mid
初始时,low指向列表的第一个元素,high指向列表的最后一个元素。
mid指向列表中间的元素。需要查找的目标值为target,当target的值小于mid指向的值,说明目标值在前半部分,此时需要把指针high移动到指针mid的左边。反之,需要把指针low移动到指针mid的右边。

mid = (low +high)//2
注意这里使用的是地板除

查找结束条件:low > high

三、具体编码

def binSearch(nums,target):
    low = 0
    high = len(nums)-1
    while low <= high:
        mid = (low + high) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] > target:
            high = mid - 1
        elif nums[mid] < target:
            low = mid + 1

a = binSearch([1,3,5,7,8,9],3)
print(a)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python实现二分查找(折半查找) 的相关文章

随机推荐

  • 技术人员的赚钱之道-7:“穷人”与“富人”定义的新认知

    1 自由的层次 思想自由 可以自由的表达自己的思想 人身自由 可以自由的行动 大多数工薪阶层其实并没有达到人身的自由 每个8个小时被限制在 公司 这个 圈子 内 时间自由 可以在任意时间内做自己想做的事情 大多数工薪阶层其实并没有达到时间的
  • GVIM的默认初试界面大小、启动位置设置

    打开GVIM安装目录下的 vimrc文件 在其中添加配置内容 winpos 100 100 设置初始界面位置 set lines 25 columns 85 设置初始界面大小 若要设置代码折叠功能 用空格键控制折叠开关 set folden
  • 微信小程序中修改data中某复杂对象的某个属性

    例如 data person name 小明 age 18 weight 188 date 2021 09 06 title 这是一个标题 在微信小程序中修改上述data中的 date 或 title属性 可以直接 使用如下操作 this
  • MethodHandle(方法句柄)

    MethodHandle 方法句柄 系列之一 MethodHandle和MethodType 阅读此文章的作者建议先了解java反射和动态代理 java7中为间接调用方法引入了新的api 其中最关键的是java lang invoke包 即
  • ELK简介以及安装部署

    ELK近实时日志分析搜索系统 ELK简介 ELK 是 Elasticsearch Logstash Kibana 三大开源框架的首字母大写简称 市面上也被称为Elastic Stack 其中 Elasticsearch 是一个基于Lucen
  • shell编程——Shell多重判断及优化

    多重判断语法elif else if 只能选1 if 条件1 then 命令 条件1成立执行 elif 条件2 then 命令 条件1不成立 条件2成立执行 elif 条件3 then 命令 条件1不成立 条件2不成立 条件3成立执行 el
  • Android——自定义LinearLayout自动换行,TextView垂直排列。

    自定义线性布局在xml中自定换行 比如你在项目中用到LinearLayout 设置水平排列android orientation horizontal 包裹button或者是TextView 但是不同分辨率的手机 不知道一行能放多少个But
  • 【开发规范】持续更新中......

    目录 一 编码规范 接口规范 命名规范 并发处理 常量定义 集合处理 控制语句 事务规范 其他规范 二 异常日志 日志规范 异常规范 三 工程规约 服务器规约 二方库规约 四 MySQL数据库规范 建表规范 索引规范 SQL语句 五 安全规
  • HBuilder云打包ios证书申请流程

    我们在hbuilderx打ios正式包的时候 需要私钥证书p12文件 和描述文件mobileprovision文件 但是生成这两个工具需要使用mac电脑 这对于我们使用windows电脑的同学们望而却步 幸好 我们中国有在线的生成ios证书
  • TypeScript声明全局类型

    背景 定义TS类型声明文件xxx d ts 文件中的类型 在外部文件使用时 理论上不需要引入文件 直接使用就行 而自定义的api d ts中的类型无法在外部使用 第一次api d ts定义方式 api d ts文件 export inter
  • 安装配置MySQL数据库服务器-多版本(简单详细,一学就会)

    目录 引言 一 5 6 51数据库服务器下载 二 8 1 0最新版数据库服务器下载 引言 个人认为MySQl数据库目前推荐的两个版本系列为5 6 51和8 系列 至于我们为什么要下载两个版本呢 是因为官方在数据库下载的结构上有所改变 5 系
  • VS2019 C++ 学习笔记三(列表框和组合框)

    一 新建一个工程 二 增加组合框和列表框 三 更改组合框和列表框的ID ID分别为 IDC COMBO COMM IDC LIST DEMO IDC EDIT INPUT 四 给列表框添加变量
  • Centos7挂载2T以下及2T以上硬盘

    一 挂载2T以下的硬盘 1 列出所有已挂载磁盘 df h 2 查看磁盘信息 从上图可以看到有一块600多g的硬盘没有挂载 dev sdb 3 硬盘分区 使用fdisk工具对磁盘分区 fdisk dev sdb 依次输入 n p 1 回车 回
  • Spring自动装配byName和byType的区别

    文章目录 前言 一 byName 二 byType 1 Class类型 2 Autowired 总结 前言 开发的时候一直用 Autowired和 Resource注解实现自动装配 但是一直不明白byType这个装配方式是什么 研究才明白这
  • 校园网如何用路由器开WiFi

    本文虽不是首创 但也可以说是全网最清楚有效的教程 本文主要针对非网络专业学生而写 因此写得会非常详细 第一步 首先准备一台电脑 一部手机 手机安装掌上大学 各个地域说法不一样 用你们能登上宽带账号的那个软件 手机的作用是登录账号 电脑的作用
  • 移植Qt5.6

    交叉编译工具 arm linux gcc 4 4 3内核 linux 4 12 0 使用移植linux 4 12到JZ2440里的linux 4 12 按照2 4 制作补丁内容获取内核 补丁下载地址 https pan baidu com
  • svn密码工具

    前言 忘记svn密码了 怎么办 下载工具运行 下载 官方地址http www leapbeyond com ric TSvnPD 教程 1 点击下载包 2 下载下来是这个 3 双击运行 到此结束
  • 【STM32】定时器中断原理及操作

    目录 时钟的选择及分频 定时器中断有关的寄存器 定时器中断有关的库函数 1 时钟使能函数 RCC APB1PeriphClockCmd 2 定时器初始化函数 TIM TimeBaseInit 3 定时器中断使能 选择函数 TIM ITCon
  • 车辆路径问题

    车辆路径问题 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 利用Python和Gurobi求解VRPSPDTW 考虑需求动态变化的共享单车调度问题研究 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文
  • 用python实现二分查找(折半查找)

    文章目录 一 算法简介 二 算法思路 三 具体编码 一 算法简介 折半查找又叫二分查找 要求线性表必须采用顺序存储结构 而且表中元素按关键字有序排列 升序或者降序 时间复杂度 O log2n 每次循环都会舍弃一半的查找空间 空间复杂度 O