二分查找-四大查找算法(二)

python每日算法|实现四大查找算法,生动形象,保证一看就会! python每日算法(8.29):举例教你如何用用python实现四大查找算法(顺序查找、二分查找、插值查找、斐波那契查找)! 阅读详情

二分查找又叫折半查找,只能对有序的数组进行查找,效率比线性查找快的多

思路说明

1.首先确定该数组的中间的下标 (left、right)指数组的左右下标mid=(left+right)/2
2.然后让需要查找的数findVal和arr[mid]比较
1)findVal>arr[mid],说明你要查找的数在mid的右边,因此需要向右递归继续查找
2)findVal=arr[mid]说明你要查找的数就是arr[mid]直接返回就行
3)findVal<arr[mid]说明你要查找的数就在mid的左边,因此需要向左递归继续查找
3.什么时候结束递归
1)找到就结束递归
2)递归完整个数组,也没找到,即left>right

先写一个查找单个结果的方法

//查找单个结果的
    public static int binarySearch(int arr[], int s, int left, int right) {
        int mid = (left + right) / 2;
        int index = left;
        if (left > right) {
            return -1;
        }
        for (int i = 0; i < arr.length; i++) {
            if (s > arr[mid]) {
                return binarySearch(arr, s, mid + 1, right);
            } else if (s == arr[mid]) {
                return index = mid;
            } else {
                return binarySearch(arr, s, left, mid - 1);
            }
        }
        return index;
    }

然后再写一个查找有多个结果的

//查找多个结果的
    public static List<Integer> binarySearch2(int arr[], int s, int left, int right) {
        List<Integer> list = new ArrayList<Integer>();
        int mid = (left + right) / 2;
        int index = left;
        if (left > right) {
            return new ArrayList<Integer>();
        }
        for (int i = 0; i < arr.length; i++) {
            if (s > arr[mid]) {
                return binarySearch2(arr, s, mid + 1, right);
            } else if (s == arr[mid]) {
                list.add(mid);
                int temp = mid + 1;
                while (temp < right) {
                    if (s == arr[temp]) {
                        list.add(temp);
                        temp++;
                    } else {
                        break;
                    }
                }
                temp = mid - 1;
                while (temp > left) {
                    if (s == arr[temp]) {
                        list.add(temp);
                        temp--;
                    } else {
                        break;
                    }
                }
                return list;
            } else {
                return binarySearch2(arr, s, left, mid - 1);
            }
        }
        return list;
    }

然后测试

 public static void main(String[] args) {
        int arr[] = {1, 2, 4, 5, 626, 666, 666};
        List<Integer> list = binarySearch2(arr, 666, 0, arr.length);
        System.out.println(list);
    }

这是结果图

在这里插入图片描述

华为项目TR5评审后发现了重大缺陷的应急处理经验 华为TR5评审后发现重大缺陷时,启动分级应急机制:1)缺陷分级:按严重性(致命/严重/一般)评估影响;2)应急响应:跨部门会议制定方案,冻结生产并调配资源;3)根因修复:通过RCA定位问题,设计变更后回归测试;4)变更管理:评审修复影响,调整发布策略;5)持续改进:记录缺陷闭环,优化流程。案例显示,软件闪退问题通过热修复补丁和代码重构解决。关键工具包括Jira、FMEA等,确保缺陷在量产前拦截,降低风险。 阅读详情

相关推荐

恒定跨导的奥秘:基于1:3电流镜的轨到轨运放输入级设计与仿真验证

本文深入探讨了基于1:3电流镜的轨到轨运放输入级设计,重点分析了恒定跨导(GM)的实现原理与仿真验证。通过精确的电流补偿机制和工艺参数优化,解决了传统运放在电源轨附近跨导下降的问题,为模拟集成电路设计提供了可靠的低电压解决方案。

weixin_33686714的博客 517

剑指 Offer 04. 二维数组中的查找

题目链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 目录DescriptionAnswer Description 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5,

liuyishou 281

Valeo近场数据集:多模态行人意图检测技术解析

行人意图检测是智能驾驶系统的关键技术,通过分析行人运动轨迹预测其行为意图。传统方法受限于单传感器数据,难以应对复杂场景。多模态融合技术结合视觉、LiDAR和惯性测量数据,显著提升检测精度。Valeo近场数据集(VNF)创新性地采用鱼眼相机、多LiDAR和动作捕捉系统,实现3D姿态与意图标签的精准对齐。该数据集支持开发距离自适应的行人感知算法,在ADAS防碰撞、智能迎宾等场景具有重要应用价值。关键技术包括传感器同步、3D姿态重建和时空图卷积网络,为行业提供了标准化评估基准。

weixin_30566111的博客 660

Java 查找方法

但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数据是否在容器当中,返回的索引无实际的意义。:对于表长较大,而关键字分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好的多。反之,数组中如果分布非常不均匀,那么插值查找未必是很合适的选择。:也称为是折半查找,属于有序查找算法。说明:元素必须是有序的,从小到大,或者从大到小都是可以的。代码跟二分查找类似,只要修改一下mid的计算方式即可。说明要查找的数字在中间节点左边。

小旺财的博客 820

基于STM32的多参数水质检测仪系统 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6主控,搭配pH、TDS、浊度、水温四大核心水质检测模块,完整实现了多参数水质检测仪的全流程开发,从多通道ADC采集、数字滤波、温度补偿、专业校准、阈值报警到人机交互,全流程无跳步保姆式拆解,配套逐行注释可直接编译的开源代码,新手跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 486

Arduino-CRSF库详解:嵌入式端CRSF协议解析与ELRS接收机集成

CRSF(Crossfire Serial Protocol)是一种面向FPV无人机的轻量级、高实时性串行通信协议,采用单总线异步传输与8位CRC-8校验机制,广泛应用于遥控链路与遥测交互。其核心在于帧同步(0xC8起始字节)、反相逻辑电平及无重传的广播式设计,对嵌入式平台的UART精度、电平匹配和状态机健壮性提出严苛要求。Arduino-CRSF库正是为资源受限MCU(如ESP32、STM32、ATmega328P)提供零配置、中断安全的协议解析能力,封装了CRC查表计算、超时恢复、多级同步验证等关键机制

weixin_35756690的博客 417

多分查找算法深度剖析:二分、三分、四分查找的性能较量

本文深入探讨了多分查找算法的性能优化与实现策略。通过对比二分、三分和四分查找的核心思想、复杂度模型及实现细节,揭示了不同分治策略的效率差异。研究提出无分支预测优化、动态退化机制等创新技术,并基于基准测试数据验证了四分查找在大数据集下的性能优势(12.4ns vs 二分15.3ns)。文章还分析了边缘场景处理、硬件适配方案,并指出SIMD指令加速等未来优化方向,为开发者提供了查找算法选型的决策框架和完整实现代码。

liulilittle的博客 764

【入坑存内计算一键指南】存内计算运算原理:算法优化、存储介质探究

本文探讨了存内计算及其面向的架构优化,尤其侧重于图算法优化和存内计算存储介质。文章介绍了存内计算的概念和意义,着重强调了存内计算解决了内存墙问题,提高了计算效率。针对图算法的优化,提出了基于位运算的创新方法,重塑了单源最短路径算法,并介绍了基于局部重叠度的链路预测算法优化设计。接着,文章详细讨论了存内计算存储介质,特别是非易失性存储器,比较了不同类型存储器的性能,并重点介绍了基于ReRAM的存内计算技术,包括其物理模型和交叉阵列结构。

一键难忘的博客 7068

如何发明新算法(一)

如何发明新算法 算法一直是计算机科学的核心,这篇文章我主要从复杂化、简单化、随机化等几个方面进行算法发明。 一、复杂化 把简单的算法想复杂点,得到新的算法。: 排序算法: 查找算法: 直接查找———二分查找———三分查找———四分查找 神经网络: 感知机———二维全连接神经网络———三维全连接神经网络 二、简单化 把复杂的算法简化,丢弃一部分结构,得到新的算法。: 排序算法: 冒泡排序———选择排序———丢弃排序 神经网络: 全连接神经网络———dropdo——— 递归算

langzizhixin的博客 4576

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

环保 HJ212协议解析

由于是做环保相关的,有时需要对212协议进行拆包和解包。HJ212协议是一种字符串协议,数据传输通讯包主要由包头、数据段长度、数据段、CRC校验、包尾组成,其中“数据段”内容包括请求编码、系统编码、命令编码、密码、设备唯一标识、总包数、包号、指令参数。请求编码为请求的时间戳,系统编码ST统一规定为22,命令编码CN为该数据包的时间类型,访问密码、设备唯一标识在对接时由平台提供,指令参数为数据内容。通讯协议的数据结构如图4所示。 图4 通讯协议的数据结构 6.1.1通讯包结构组成 名称 类型 长度

ccf19881030的专栏 2万+

【算法学习】四 二分法查找(折半法或者折半查找)

前言: 社长,4年api搬运工程师,之前做的都是一些框架的搬运工作,做的时间越长,越发感觉自己技术越菜,有同感的社友,可以在下方留言。现更侧重于java底层学习和算法结构学习,希望自己能改变这种现状。 为什么大厂面试,更侧重于java原理底层的提问,因为通过底层的提问,他能看出一个人的学习能力,看看这个人的可培养潜力。随着springboot的流行,大部分的开发,起步就是springboot。...

程序猿学社的博客 9226

基于STM32L4XX的环境光传感器(AS7343-DLGMN)应用程序设计

define AS7343_STATUS_SPECTRAL_INT (1 << 3) /* 光谱数据就绪 */#define AS7343_SYS_CFG_SPECTRAL_EN (1 << 1) /* 光谱测量使能 */#define AS7343_SYS_CFG_ALS_EN (1 << 0) /* ALS使能 */#define AS7343_SYS_CFG_INT_EN (1 << 4) /* 中断使能 *//* 切换通道组 (0=组1 F1-F6, 1=组2 F7-F12) */

myron6688的博客 258

图解算法:四大查找算法

目录第一章 顺序查找算法1.1、算法介绍1.2、算法实现第二章 二分查找算法2.1、算法介绍2.2、算法实现第三章 插值查找算法3.1、算法介绍3.2、算法实现第四章 斐波那契查找4.1、算法介绍4.2、算法实现 项目地址:https://gitee.com/caochenlei/algorithms 第一章 顺序查找算法 1.1、算法介绍 顺序查找(Order Search)也称为线形查找,从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值num相比较,若相等则表示查找成功;若扫

轻松的小希 3957

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

四大基本查找算法

查找算法主要有下面几种 顺序查找/线性查找 二分查找/折半查找 插值查找 斐波那契查找 1.线性查找 就是根据对应的元素在其遍历数组中比较,找到则返回,这里便不列出,贴b站老师的图,如下: 2.二分查找 首先将其元素进行排序,使得元素呈顺序出现,定义一个区间[left,right]取中值来进行查找,left = 0, right = length-1; 如果该元素比其(目标值)小就向右 left = middle 进行缩小范围查找,如果中间的元素比其(目标值)大就向左 right =

sdshdutx的博客 1461

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Python实现四大经典查找算法

本文主要实现查找算法中的二分查找算法,顺序查找,插入查找算法以及fibonacci查找算法,个人认为以上查找算法本质的不同其实就是缩小的区间方式不一样罢了。二分查找算法采用二分缩小区间的方法;顺序查找算法每次缩小一个单位区间;而插入查找算法则通过数据的分布特征来重新计算区间:,就是二分查找的升级版本;最后的fibonacci查找算法的缩小区间的方法则是通过fibonacci数列来确定。同样...

yinhui_zhang的博客 2668

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

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

【查找算法】解析学习四大常用的计算机查找算法 | C++

在数据处理的过程中,能否在最短时间内去找到目的数据,是编程开发人员非常值得关心的一个问题。所谓查找,也被称为搜索,它是指从数据文件中找出满足某些条件的记录。在数据结构中描述算法时习惯用“查找”,而在搜索引擎中找信息或资料时习惯用“搜索”。我们在电话簿中查找某人的电话号码,电话簿就像是数据文件库,而姓名就是去查找电话号码的键值。我们经常使用的搜索引擎所设计的Spider程序(网页抓取程序爬虫)会主动经由网站上的超链接“爬行”到另一个网站,搜集每个网站上的信息并且收录到数据库中,这其中就涉及到了查找算法。

PIONEER 2194

数据结构——四大查找算法(工作必备)

查找算法 在java中,常用的查找有四种 顺序(线性)查找 二分查找折半查找 插值查找 斐波那契查找 1. 线性查找 线性查找是逐一比对,发现有相同值,就返回下标 public static int SeqSearch(int[] arr, int findVal) { for(int i=0; i<arr.length; i++){ if(arr[i] == findVal) return i; } return -1; }

欢迎来到 Baret-H 的博客 1940

深入剖析四大查找算法:原理、优化与实战

不同的场景对查找效率的要求差异巨大:从无序数组的暴力扫描到有序数组的精准定位,从均匀分布数据的预测式查找到基于黄金分割的优雅分割策略。理解算法背后的数学原理,能帮助开发者在不同场景下灵活选择最优策略,显著提升程序性能。无论是数据库索引设计,还是实时排行榜更新,查找算法的优化都是性能提升的关键!,从数学原理到代码实现,从性能分析到实战场景,带你全面掌握它们的核心思想与优化技巧。

阿新的博客 1128

四大查找算法

顺序查找算法:O(n) //length需要在外部进行sizeof(array)/sizeof(int)来获取,因为传入数组之后,array已经退化成指针类型了,sizeof结果永远是4。(详情见sizeof,在3.数据结构-数组) int SeqSearch(int array[], int length, int val) { if (array == nullptr || length &...

SamYu 431

四大查找ASL的总结

一、一般线性表的顺序查找 ASL成功 = (n+1)/2 ASL失败 = (n+1) 二、有序线性表的顺序查找 ASL成功 = (n+1)/2 ASL失败 = (n+1)/2 + n/2 三、二分查找 二分查找的ASL成功和ASL失败通过画出对应查找序列的判定树,进而进行计算。 四、索引查找 ASL = I块内 + I块间 其中块间可以使用二分查找。 (1)ASL = (b+1)/2 + (s+1...

乐行僧的博客 7956

java实现四大查找算法(线性查找,二分查找,插值查找,斐波那契查找)

学习笔记--java实现四大查找算法(线性查找,二分查找,插值查找,斐波那契查找)

m0_49342830的博客 582

java实现四大查找算法

7、查找 分类: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 1 线性查找 线性查找的数组可以是无序的 //线性查找 public class SequenceSearchTest { public static void main(String[] args) { int[] array={1,2,6,4,5,9}; in...

qq_40609192的博客 332

《二分查找:从 “折半” 到 “精准命中” 的算法逻辑拆解》

算法面试中,二分查找是 “高频考点” 之一,它不仅能考察求职者的逻辑思维,还能检验对时间复杂度优化的理解。而在实际开发中,二分查找更是处理 “有序数据查找” 问题的最优解无论是缓存查找、数据索引,还是参数优化,都能看到它的身影。但很多开发者对二分查找的理解停留在 “基础用法”,忽略了其在复杂场景下的拓展应用,也未能规避常见的边界错误。本文将结合面试真题和实战案例,全面解析二分查找的原理、优化技巧、场景延伸,帮你既能轻松应对面试,又能在实际开发中高效运用,真正发挥二分查找的 “效率优势”!

月亮永悬不落,剑指巅峰 1628

Java实现四大基本排序算法和二分查找

Java实现四大基本排序算法和二分查找 Java笔试中,又碰到很多关于这几个算法的编程题,翻出来看看,复习复习 /** * 二分查找法 * 基本思想:假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较, * 如果两者相等,则查找成功,否则利用中间位置记录将表分成前、后两个字表, * 如果中间位置记录的关键字大于查找关键字,则进一步查找前一字表,反之 * 则进一步查找后一...

潇歌的博客 316
上一篇: 线性查找-四大查找算法(一)
下一篇: 插值查找-四大查找算法(三)
来来爱编程
博客等级 码龄7年 375粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值