二分查找算法

【Python算法系列十】二分查找算法 二分查找,也叫折半查找,是一种适用于顺序存储结构的查找方法。它是一种效率较高的查找方法,时间复杂度为 O(lgn),但它仅能用于有序表中。也就是说,表中的元素需按关键字大小有序排列。 二分查找用左右两个指针来标注查找范围。程序开始时,查找范围是整个线性表,左指针指向第一个元素,右指针指向最后一个元素;每一次循环过后,查找范围都缩小为原先的一半,直到左右指针重叠或者左指针处于右指针的右侧。因为每次缩小一半的范围,所以可以得出二分查找的时间复杂度为 O(lgn)。 ... 阅读详情

这个在之前的九大算法中已经写过了,这次重新又写了一遍是为了进一步加深理解并学习--树这一存储结构

/************************************************************************
*
* 文件名:3.1.1.cpp
*
* 文件描述:二分查找算法
*
* 创建人:  fdk

* 时  间:  2018-08-02
*
* 版本号:1.0
*
* 修改记录:
*
************************************************************************/
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;

/*定义结构体*/
typedef struct
{
    int *arr;
    int length;
}Dynamic;

/*二分查找*/
int BinarySearch(Dynamic *d, int key);
int main()
{
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int length = sizeof(a) / sizeof (a[0]);
    Dynamic *arrs;
    arrs->arr = a;
    arrs->length = length;
    cout << BinarySearch(arrs, 5);
    return 0;
}

/*二分查找*/
int BinarySearch(Dynamic *d, int key)
{
    /*在数组中查找值为key的元素并返回下标值*/
    int left;
    int right;
    int mid;

    left = 1; //初始化左边界
    right = d->length; //初始化右边界
    while (left <= right)
    {
        mid = (left + right) / 2;  //计算中间元素坐标
        if (d->arr[mid] > key)
        {
            right = mid - 1;      //调整右边界
        }
        if (d->arr[mid] < key)
        {
            left = mid + 1;      //调整左边界
        }
        else
        {
            return mid;
        }
    }
    return -1;
}

 

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析 本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程。从运动学建模入手,对比了基于距离与基于位置偏差的两种控制策略,并重点阐述了高精度轨迹跟踪的控制器设计、Simulink仿真搭建及PID参数整定方法,为移动机器人运动控制提供了完整的仿真实践指南。 阅读详情

相关推荐

Windows-Anaconda3+TensorFlow安装教程

测试环境:win10-64位和win7-64位 (系统必须是64位,因为TensorFlow目前只支持64位) 一、安装Anaconda3 1.下载Anaconda3 Anaconda官网链接:link 这里我们选择Windows版本,python3.6-version-64位,如下图所示。 2.下载完成之后,点击安装Anaconda3 注意:安装过程中要选择添加环境变量,如图 待安装完成...

DoctorCuiLab的博客 3086

二分查找【多种方法+图解】

二分查找

Jambo!的博客 6060

多模态RAG实战:为LLM装上视觉之眼,实现图文混合文档智能问答

检索增强生成(RAG)技术通过结合外部知识库,有效缓解了大语言模型(LLM)的幻觉问题,并扩展了其知识边界。其核心原理是将文档切分、向量化后存入向量数据库,在问答时通过语义检索召回相关上下文,辅助LLM生成更精准的答案。这项技术的核心价值在于,它为大模型应用提供了一种低成本、高效率的知识注入与实时更新方案,广泛应用于智能客服、知识库问答、文档分析等场景。随着应用深入,纯文本RAG在处理产品手册、学术论文、设计图纸等富含视觉信息的文档时面临瓶颈。本文聚焦的**多模态RAG**和**视觉理解**技术,正是为了解

weixin_30698527的博客 722

详解二分查找算法

二分查找是通过将递增序列不断减半的方式寻找目标值的下标。其看似简单,但往往存在一些细节被忽略,即while循环判断条件和区间右边界的取值方式。另外,我们往往只知二分查找搜索目标值的功能,而忽略了二分查找的另外一个功能,即寻找最大的小于目标值的元素和最小的大于目标值的元素。 一、二分查找算法的基本框架 二分查找充分利用了序列元素的递增性质,采用分治策略搜索目标值(目标值存在于序列中),目标值的左边界和右边界(目标值不存在于序列中),其中左边界指的是最大的小于目标值的元素,右边界指的是最小的大于目标值的元素

一地鸡毛的博客 3292

stm32学习笔记-启动文件

1、配置栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp EQU:相当于C中的define,定义Stack_Size = 0x00000400。 AREA: 指...

某风吾起的博客 4529

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8109

【算法】手把手学会二分查找

二分查找算法的详细讲解,如果你还不懂二分,看这篇就对了✨✨

Lin_Alpaca的博客 4366

防止加入域主机脱离域的控制(管理员权限)

一、简介   当公司所有主机加入到域后,SA首要工作就是防止加入域的主机脱离域的控制。让我发现该工作的必要性是一程序猿,前一天刚配完禁止执行QQ、微信执行,第二天就看到那家伙在用微信聊天,肯定是用回旧的本地账号登陆了。   本人所在公司安装软件的类型繁杂,无管理员权限运行不少软件会报错,不得不授予「域账号」本地管理员权限。过大的权限带也来了一系列后果:用户可随意退出域、创建本地管理员...

der69615的博客 3173

数据结构与算法 | 二分查找

原理 二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 为了方便理解,我们以数组1, 2, 4, 5, 6, 7, 9, 12, 15, 19, 23, 26, 29, 34, 39,...

平头哥的技术博文 3122

SPAD单光子雪崩二极管:从基础原理到前沿应用

本文深入解析SPAD单光子雪崩二极管的基础原理、硬件实现关键及核心性能参数,并探讨其在激光雷达、量子通信和生物医学成像等前沿领域的创新应用。SPAD凭借超高灵敏度和精确的时间分辨率,正在推动自动驾驶、量子技术和医学诊断等领域的革命性发展。

weixin_30335575的博客 661

SpringBoot整合JWT实战:从零构建无状态认证系统,详解Token生成、验证与安全最佳实践

JWT在SpringBoot中的实现与应用 摘要:本文介绍了JWT(JSON Web Token)的基本概念、与Session机制的对比,以及SpringBoot项目中JWT的整合实现。JWT由Header、Payload和Signature三部分组成,具有无状态、跨域支持等优势。文章详细展示了如何在SpringBoot项目中配置JWT环境,封装JWT工具类来实现Token的生成、解析和验证功能,包括密钥管理、自定义声明、签名验证等核心操作。通过对比表格和生活化比喻,帮助读者理解JWT与传统Session的

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1773

优选算法《二分查找》

在之前的学习当中我们已经初步了解过了二分查找的整体逻辑以及二分查找,接下来我们在本篇当中将系统的来学习二分查找的使用方式以及在什么情况下可以使用二分查找。在之前的学习当中我们了解到的二分查找是要求在有序的数组当中当数组元素有序时才能使用,但是其实这只是二分查找最朴素的使用场景,接下来我们将学习更多的二分查找的使用场景。相信通过被本章的学习之后你会有所收获,一起加油吧!!!

mljy.博客 2496

5、癌症数据预处理技术与深度学习在癌症预测中的应用

本文详细介绍了癌症数据预处理技术和深度学习在癌症预测中的应用。针对CT扫描图像、X射线图像、超声图像、基因表达数据和文本数据等不同类型的癌症数据,分别阐述了去噪、插值、配准、归一化等预处理技术的具体方法。同时,分析了深度学习在乳腺癌、白血病和宫颈癌预测中的作用,结合相关影响因素探讨了模型的应用潜力。此外,还总结了深度学习在癌症预测中面临的挑战及未来发展方向,为癌症的早期诊断与精准预测提供了理论支持和技术参考。

alice7model的博客 123

算法——二分查找算法

简单来说,"二分"指的是将查找的区间一分为二,通过比较目标值与中间元素的大小关系,确定目标值可能在哪一半区间内,从而缩小查找范围。这个过程不断重复,每次都将当前区间二分,直到找到目标值或确定目标值不存在为止。这种分而治之的策略使得二分查找算法具有较高的效率,时间复杂度为O(log n)。大致图解如下即通过二段性,在每次判断过后可以一次性减少将近一半的数据,然后通过不断的挪移左右区间来筛选出最后的结果。

qq_73201597的博客 3503

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【基础算法总结】二分查找

二分查找算法是一种十分经典,十分基础的算法。细节最多,最容易写出死循环,但是真正掌握之后,又是最简单的算法。相信大家在之前一定听过"二分查找只用于数组有序的情况下这种说法,其实这是不准确的!!!它的本质是:数据具有二段性。应用场景准确的说是:当数组里的一个数和目标数比较之后,划分出了两段区域(此时具有"二段性"),通过某种规律可以直接舍弃一段区域,在另一段区域查找,周而复始这个操作,直到找到目标数。本篇文章将通过若干道题目进行验证。

2301_77900444的博客 1808

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

算法思想总结:二分查找算法

二分查找的策略基本上都是去找一个数,对应的有三种模版:正常的二分查找、左区间端点查找、右区间端点查找。

weixin_51142926的博客 2387

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【算法】二分查找

本文总结了二分查找的特点、使用条件、和时间复杂度的分析,并且还将二分进行总结成三种情况,分别是朴素二分、查找左边界的二分和查找右边界的二分三种情况。通过若干到例题进行强化算法思维。

2302_80475369的博客 1841

算法【Java】—— 二分查找

介绍二分查找算法,使用Java 实现

熵减玩家 4636

数组的二分查找算法

C语言:分支、循环结构语法基础巩固

qq_73270870的博客 2089

算法 二分查找算法

题目:本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Positi...

Dezeming的博客 7821
上一篇: 7-2 一元多项式的乘法与加法运算
下一篇: 二叉树的建立、插入、删除、遍历(前中后的递归及非递归遍历和层次遍历)、求树高及叶子结点等
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值