二分查找算法【折半查找算法】

news2024/9/25 15:28:01

二分查找算法

二分查找算法,也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它的工作原理是通过不断地将搜索区间减半来缩小目标值可能存在的范围,直至找到目标值或确定目标值不存在于数组中。二分查找的关键在于每次比较都能排除掉一半的元素,因此其时间复杂度O(log n),其中 n 是数组的长度。

基本流程:

  • 确定数组的中间元素。
  • 如果中间元素正好是要查找的目标值,则查找成功。
  • 如果中间元素比目标值大,那么只在数组的左半部分继续查找。
  • 如果中间元素比目标值小,那么只在数组的右半部分继续查找。
  • 重复步骤1至4,直到找到目标值或搜索区间为空。

二分查找的条件:

  • 数组必须是有序的。
  • 数组最好是采用顺序存储结构。

实现细节:

在实现二分查找时,通常有两种方式处理边界条件:

  • 闭区间版本:使用两个指针,left 和 right,初始时 left = 0, right = n - 1,并在循环内更新 left 和 right 的值,直到 left > right。
  • 开区间版本:使用两个指针,low 和 high,初始时 low = 0, high = n,并在循环内更新 low 和 high 的值,直到 low >= high。

复杂度分析:

  • 时间复杂度:平均和最坏情况下都是 O(log n)。
  • 空间复杂度:O(1),因为除了输入数组外,只使用了几个变量。

代码示例

def binary_search(nums, target):
    left, right = 0, len(nums) - 1

    while left <= right:
        mid = left + (right - left) // 2  # 防止(left + right)可能引起的整数溢出

        if nums[mid] == target:
            return mid  # 找到目标值,返回索引
        elif nums[mid] < target:
            left = mid + 1  # 目标值在右侧子数组
        else:
            right = mid - 1  # 目标值在左侧子数组

    return -1  # 没有找到目标值

# 使用数组和目标值调用函数
nums = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
target = 13

index = binary_search(nums, target)

if index != -1:
    print(f"目标值 {target} 的索引位置 {index}.")
else:
    print(f"目标值 {target} 未找到.")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914797.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【堆 优先队列】1354. 多次求和构造目标数组

本文涉及知识点 堆 优先队列 LeetCode1354. 多次求和构造目标数组 给你一个整数数组 target 。一开始&#xff0c;你有一个数组 A &#xff0c;它的所有元素均为 1 &#xff0c;你可以执行以下操作&#xff1a; 令 x 为你数组里所有元素的和 选择满足 0 < i < target.…

瓦罗兰特游戏帧数低怎么办 瓦罗兰特游戏帧率提不上去怎么解决

瓦罗兰特是一款由拳头游戏&#xff08;Riot Games&#xff09;开发的5v5英雄射击游戏。结合了MOBA元素&#xff0c;每个角色都拥有四个独特的技能&#xff1b;提供了多种游戏模式&#xff0c;如5V5战术射击等&#xff1b;角色和皮肤设计丰富。游戏中&#xff0c;玩家将扮演各具…

《梦醒蝶飞:释放Excel函数与公式的力量》10.3 IMABS函数

第一节 10.3 IMABS函数 10.3.1 函数简介 IMABS函数是Excel中的一个工程函数&#xff0c;用于计算复数的绝对值&#xff08;模&#xff09;。在工程和科学计算中&#xff0c;复数的模是一个重要的概念&#xff0c;表示复数在复平面上到原点的距离。 10.3.2 语法&#xff1a; …

idea控制台乱码问题解决教程

注&#xff1a;按顺序来操作&#xff0c;完成后要重启软件 方案一&#xff1a;修改Tomcat的编码设置 在Tomcat的VM options中添加了-Dfile.encodingUTF-8 方案二&#xff1a;修改IDEA的编码设置 File->Settings->Editor->File Encodings 将Global Encoding、Proj…

顶顶通呼叫中心中间件-打电话没声音检查步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-电话没声音检查步骤(mod_cti基于FreeSWITH) 检查步骤 1、检查配置文件 检查配置文件&#xff1a;打开ccadmin -> 配置文件 -> vars -> external_ip$${local_ip_v4}看一下这个有没有配置正确的外网IP&#xff0c;如果没有配置正确就需要配置正…

【C++】开源:drogon-web框架配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍drogon-web框架配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…

神经网络构成、优化、常用函数+激活函数

Iris分类 数据集介绍&#xff0c;共有数据150组&#xff0c;每组包括长宽等4个输入特征&#xff0c;同时给出输入特征对应的Iris类别&#xff0c;分别用0&#xff0c;1&#xff0c;2表示。 从sklearn包datasets读入数据集。 from sklearn import darasets from pandas impor…

Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南

网页抓取已经成为任何处理网页数据提取的人都必须掌握的一项重要技能。无论你是开发者、数据科学家还是希望从网站收集信息的爱好者&#xff0c;Puppeteer都是你可以使用的最强大工具之一。本完整指南将深入探讨什么是Puppeteer以及如何有效地在网页抓取中使用它。 Puppeteer简…

真正高水平的一流领导,从不和员工打成一片,这3点原因太真实

真正高水平的一流领导&#xff0c;从不和员工打成一片&#xff0c;这3点原因太真实 第一个&#xff1a;分化团队 在团队管理过程中&#xff0c;如果人不多&#xff0c;那还好。 可一旦人数多了&#xff0c;领导就不可能面面俱到&#xff0c;顾及到每一个人。 肯定会出现&am…

基于Java技术的网上图书商城系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术、SpringBoot框架 工具&#xff1a;Eclipse、Navicat、Maven 系统展示 首页 用户注册界面…

Java中的公平锁和非公平锁

1、什么是公平锁和非公平锁 公平锁和非公平锁是指在多线程环境下&#xff0c;如何对锁进行获取的顺序和策略的不同。 公平锁是指多个线程按照申请锁的顺序来获取锁&#xff0c;即先到先得的策略。当一个线程释放锁之后&#xff0c;等待时间最长的线程将获得锁。公平锁的优点是保…

第2章 信息技术知识

第2章 信息技术知识 本章简要叙述了信息技术相关基础知识&#xff0c;包含软件工程、面向对象系统分析与设计、应用集成技术、计算机网络技术和新一代信息技术内容。 2.1 软件工程 随着所开发软件的规模越来越大、复杂度越来越高&#xff0c;加之用户需求又并不十分明确&…

【RIP实验-熟悉基础配置】

实验拓扑 实验要求 根据实验拓扑的IP地址分配&#xff0c;为所有设备配置对应的IP地址和环回地址。全网运行RIPv2&#xff0c;将R1、R2、R3和R4的物理端口、Loopback地址和10.1.00网段进行宣告。并在rip协议下配置路由自动汇总&#xff0c;观察R1/R2是否能够收到10.0.0.0的详细…

【Pytorch实用教程】transformer中创建嵌入层的模块nn.Embedding的用法

文章目录 1. nn.Embedding的简单介绍1.1 基本用法1.2 示例代码1.3 注意事项2. 通俗的理解num_embeddings和embedding_dim2.1 num_embeddings2.2 embedding_dim2.3 使用场景举例结合示例1. nn.Embedding的简单介绍 nn.Embedding 是 PyTorch 中的一个模块,用于创建一个嵌入层。…

MATLAB engine for python调用m文件函数输出变量值python调用MATLAB函数混合编程

MATLAB engine for python调用m文件函数输出变量值python调用MATLAB函数混合编程 说明(废话)解决方案总结 说明(废话) python调用MATLAB函数&#xff0c;MATLAB函数实现在m文件&#xff0c;python直接调用MATLAB中的函数。 首先还是要安装好MATLAB engine python setup.py ins…

3d已经做好的模型怎么改单位?---模大狮模型网

在展览3D模型设计行业中&#xff0c;经常会遇到需要将已完成的模型进行单位转换的需求。这可能涉及从一种度量单位转换为另一种&#xff0c;例如从英制单位转换为公制单位&#xff0c;或者根据特定的展览场地要求进行尺寸调整。本文将探讨如何有效地修改已完成的3D模型的单位&a…

标签印刷检测,如何做到百分百准确?

印刷标签是一种用于标识、识别或包装产品的平面印刷制品。这些标签通常在纸张、塑料膜、金属箔等材料上印刷产品信息、条形码、图像或公司标识&#xff0c;以便于产品识别和管理。印刷标签有各种形状、尺寸和材质&#xff0c;可以根据具体需求进行定制设计。常见的印刷标签包括…

分类模型的算法性能评价

一、概述 分类模型是机器学习中一种最常见的问题模型&#xff0c;在许多问题场景中有着广泛的运用&#xff0c;是模式识别问题中一种主要的实现手段。分类问题概况起来就是&#xff0c;对一堆高度抽象了的样本&#xff0c;由经验标定了每个样本所属的实际类别&#xff0c;由特定…

南京邮电大学运筹学课程实验报告1 线性规划求解 指导

一、题目描述 实验 一 线性规划求解 实验属性&#xff1a; 验证性     实验目的 1&#xff0e;理解线性规划解的基本概念&#xff1b; 2&#xff0e;掌握运筹学软件的使用方法&#xff1b; 3. 掌握线性规划的求解原理和方法。 实验内容 认…

MQTT是什么,物联网

写文思路&#xff1a; 以下从几个方面介绍MQTT&#xff0c;包括&#xff1a;MQTT是什么&#xff0c;MQTT和webSocket的结合&#xff0c;以及使用场景&#xff0c; 一、MQTT是什么 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅消息…