Java算法,二分查找(BinarySearch)

【二分查找的实现方法----Java的binarySearch()方法】 本文将介绍二分查找的实现方法。并对Java中的binarySearch()方法进行具体研究 阅读详情

1.二分查找的实现原理

  • 要求在一个有序数列中,查找指定的元素

  • 注意:如果数列中的元素是对象类型,要求对象可以大小比较。

  • 二分查找机制:

    • 每次都找到当前数列的中间位置的元素,与待查找的元素比较

    • 相等,找到了元素

    • 不相等,如果待查找的元素比中间位置的元素小,就去左侧继续查找。 如果待查找的元素比中间位置的元素大,就去右侧继续查找

    • 结束条件

      1. 找到元素,就停止查找

      2. 元素查找不存在时,就会对数列进行压缩

        当数列的两个边界交叉时,表示已经没有元素了

0 1 2 3 4 5 6 7 8 9 数组下标
1 3 5 7 9 15 20 25 30 100 元素

找 15(这个元素)
第1次,找到中间位置 left=0 , right=9 , mid=(0+9)/2=4–> 9 < 15, 继续向右找
第2次,找到中间位置 left=5 , right=9 , mid=7–> 25>15 , 继续向左找
第3次,找到中间位置 left=5 , right=7 , mid=6—> 15=15 找到

找24
第1次,left=0,right=9,mid=4–>9<24 -->
第2次,left=5,right=9,mid=7—>25>24 <–
第3次 ,left=5,right6,mid=5—>15<24 -->
第4次,left=6,right6,mid=6—>20<24 -->
第5次,left=7,right=6,结束

return -left - 1 ;

2.二分查找的代码实现

public class BinarySearch {
    public static void main(String[] args) {
        int nums[] = {1,3,5,7,8,10,12,20,30,50,100};//定义一个数组
        int i = BinarySearch(nums,12);//调用二分查找,查找12
        System.out.println(i);//程序运行,输出结果为  6
    }

public static int BinarySearch(int[] nums,int num){
		//定义二分查找的方法,传入一个数组,传入一个整数表示想要查找的数字
        int left = 0;//定义左边界
        int right = nums.length-1;//定义右边界
        while(true){
            if(left>right){
                return -left-1;
            }
            int mid = (right+left)/2;
            int minNum =nums[mid];
            if(minNum == num){
                return mid;
            }
            if(num<minNum){
                //继续向左找
                right = mid-1;
            }else{
                //继续向右找
                left =mid+1;
            }
        }
    }


}

Java binarysearch方法原理详解 主要介绍了Java binarysearch方法原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 立即下载

相关推荐

GraphRAG 踩坑记录

GraphRAG踩坑记录

yufanwenshu的博客 4351

Java中的binarySearch方法

大家好,我是雄雄,今天我们来看看java中的binarySearch方法! 前言:我们都知道,如果我们想要在一个集合中查找某个元素所在的位置时,可以使用list类自带的indexOf方法,简单方便还快捷。不过,Collections类也给我提供了个查找集合中元素的方法——binarySearch,但是这个方法和indexOf方法无论从检索原理还是返回值上来说,都有很大的差距! IndexOf方法 我们先来看看indexOf是怎么检索集合内元素的,示例代码如下: public static void mai.

穆雄雄的博客 1万+

innovus 命令每日精要 | 掌控Innovus布线的利器——setNanoRouteMode详解

在数字IC后端设计的复杂世界里,布线优化是至关重要的一步。今天,我来给大家深入讲解Innovus工具中setNanoRouteMode命令的精妙之处,让你轻松驾驭布线策略,提升设计质量。setNanoRouteMode是Innovus中用于配置NanoRoute绕线行为的关键命令。通过其丰富的参数,你可以精细控制布局后阶段的绕线策略、信号完整性优化、工艺适配及设计规则修复等流程。下面,我将按功能分类总结其核心选项,并针对不同场景给出建议。

weixin_50820814的博客 3532

第二十九Java数组使用binarySearch()方法查找指定元素

System.out.println("查找到 100 的位置是:" + index1);System.out.println("查找到 60 的位置是:" + index2);执行上述代码,输出结果如下:查找到 100 的位置是:5查找到 60 的位置是:-1(2) 除了上述形式外,binarySearch() 还有另一种常用的形式,这种形式用于在指定的范围内查找某一元素。

weixin_62458944的博客 788

【FPGA】DDR3调试总结

DDR3管脚根据不同的功能可以分为:数据组、地址组、控制组和电源组。如图上所示,共96个管脚。

m0_51679724的博客 4970

vcs 覆盖率收集1——三种覆盖率类型、covergroup、bins、数据采样、覆盖率选项

介绍各种覆盖率,以及如何编写覆盖率收集的代码

qq_42135020的博客 1万+

深入学习java源码之Arrays.binarySearch()与Arrays.copyOf()

深入学习java源码之Arrays.binarySearch()与Arrays.copyOf() java中有三种移位运算符 &lt;&lt;      :     左移运算符,num &lt;&lt; 1,相当于num乘以2 &gt;&gt;      :     右移运算符,num &gt;&gt; 1,相当于num除以2 &gt;&gt;&gt;    :     无符号右移,忽略符...

悦分享 565

别再只用串口助手了!用LabVIEW给STM32F103C8T6做个专属上位机(附完整源码)

本文详细介绍了如何利用LabVIEW为STM32F103C8T6开发定制化上位机,替代传统串口助手,实现高效数据交互。内容涵盖硬件架构设计、STM32固件优化、LabVIEW上位机开发技巧及工业级应用案例,特别适合需要实时数据采集与处理的工控场景。

weixin_42524762的博客 368

从JAVA工具类Arrays类的binarySearch谈谈有序数据集合的二分查找算法

JAVA中的二分查找 JAVA8源码的工具类Arrays类提供了二分查找方法: The array must be sorted.If the array contains multiple elements with the specified value, there is no guarantee which one will be found. public static int bina...

砥砺前行的博客 612

硬件测试入门--环路响应(Bode)测试

环路分析的一个重要作用就是分析开关电源的稳定性。扫频测试原理主要是给开关电源电路注入一个频率变化的正弦信号,测量开关电源在频域上的特性,通过分析穿越频率、增益裕度和相位裕度来判断环路是否稳定,可以为电子工程师设计稳定的控制电路提供直观的数据。开关电源的稳定性关系到整个应用系统的可靠性,利用伯德图可以看出在不同频率下系统增益的大小和相位。通过伯德图来对开关电源的环路稳定性进行判断和分析已经成为评估开关电源可靠性必不可少的方法。

songninging的博客 1万+

基于机器学习和深度学习的新能源功率预测研究综述--学术论文模式--个人梳理

本文是博主根据前人的研究成果总结的机器学习和深度学习等理论方法在新能源功率预测领域的相关研究内容要点,按照学术科技论文写作的模式进行的呈现,包括文章引用等也都做了详细的批注,花了很多时间和心血,一方面是对自己学习成果的一些总结,另一方面也希望对大家有用(尽量不要直接copy哦,转载请标注,如有不当请评论或私信指出哦可再生能源的间歇性给新型电力系统的运行带来了巨大挑战,准确地预测新能源出力对于电网的安全可靠运行尤为重要。

干吧滴! 6324

java中数组的binarySearch()方法详解

记录下躺在床上收到女朋友发来的java问题惊坐起查了5分钟的资料的收获。 咳咳,回到正题。 首先,binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的。    binarySearch(Object[], Object key) 方法的object[]参数是要查找的数组,key参数为要查找的key值。 方法的返回值有几种: 1.找到的情况下...

wanderlustLee的博客 2万+

uniapp - 解决苹果ios真机运行报错:错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配(HbuilderX运行IOS手机出现问题,uniapp运行到IOS真机提示请查看是否设备未)

uni-app,ios苹果,App平台端,uniapp运行到IOS真机提示错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UUID在哪里,uniApp运行到ios真机报错解决,安装自定义基座App失败,没找到有计划资源,证书、标识符和描述文件,证书标识符和描述文件下面没有选项怎么回事,HBuilder真机调试报错请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UniApp运行到IOS真机提示,授权的设备才可以直接安装基座,添加调试的IOS设备,在Devices中,添加手机设备UUID

🏆 前端领域优质创作者 1万+

binarysearch java,java数据结构之二分查找法 binarySearch的实例

java数据结构之二分查找法 binarySearch的实例折半查找法,前提是已经排好序的数组才可查找实例代码:public class BinarySearch {int[] bArr;public void setArr(int[] bArr){this.bArr=bArr;}public static void main(String[] args) {int arrLength=16;in...

weixin_29774611的博客 151

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》

文章目录0.前言1.功能2.示例有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来① 实现原理② 实现代码③ 性能分析 0.前言 最近才开始学算法,学习的材料是《算法 第四版》java语言描述,我会在接下来的学习中运用以下步骤学习记录,望广大读者朋友能够喜欢,也请多多提提意见。 首先我会说明这个算法提供了什么功能,拿来干嘛的,然后...

BitHachi 893

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

二分查找 Arrays.binarySearch(a, key)的源码

1.查看Arrays.binarySearch(a, key)的源码,可以发现它的实现为:public static int binarySearch(int[] a, int key) { return binarySearch0(a, 0, a.length, key); }2.查看binarySearch0(a, 0, a.length, key)的源码为: priv...

lala_c的博客 1047

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

二分查找算法

最近决定重拾Java,于是拿起了Robert Sedgewick的《算法》。初读两节,发现很多知识点都遗忘了,但是这本书讲得很细,值得一啃。 书里给的第一个例子就是二分查找算法,这是个很经典的算法,晚上闲来无事,就试着用Java实现了。由于这本书的代码包含了作者及其团队封装的包(algs4.jar),我便去网上下载并导入了这个包,但是运行源代码后一直出现如图所示的错误: 我在网上查了很久,都

对LLM,AI应用有深厚兴趣,研究方向NLP。connect me by DeSaintamore_ 3484

binarysearch 数组 java_Java中的Arrays.binarySearch()方法详解

###1. 作用通过二分法在已经排好序的数组中查找指定的元素,并返回该元素的下标###2. 操作接口方法原型为:public static int binarySearch(Object[] a, Object key),该函数需要接收两个参数:数组名称,以及我们所需要查找的元素###3. 返回值该方法的返回值的类型为整型,具体返回值具体分为以下两种情况:如果数组中存在该元素,则会返回该元素在数组...

weixin_28993311的博客 1572

JAVA基础系列:Arrays.binarySearch二分查找

首先,binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的 1) binarySearch(Object[]a, Object key) a: 要搜索的数组 key:要搜索的值 如果key在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素的索引。 技巧...

weixin_30763455的博客 302

Java中的二分查找和Arrays.binarySearch工具二分查找的比较及冒泡排序

自己写的二分查找。要查找,但首先得将数组排序。 public static void main(String[] args) { Scanner s=new Scanner(System.in); int[] a ={8,5,7,3,1,6,2,4,9,10}; //定义一个长度为10的int数组 int d; //相互交换时所需的第三个容器 //输出整个...

9426474的博客 297

java list binary search_Collections里面的binarySearch方法

标签:------Java培训、Android培训、ios培训、.Net培训、期待与您交流!------Collections里面的binarySearch方法查阅API发现其返回值类型为:如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为 list.size()...

weixin_28702147的博客 617

Arrays.binarySearch和Collections.binarySearch的详细用法

概述 binarysea...

436

java睡眠后继续执行_Java面试必备知识点梳理:二分查找算法

在计算机世界里“数据结构+算法=程序”,因此算法在程序开发中起着至关重要的作用。虽然我们在开发中自己设计算法的情况不多,在工作中却离不开算法。无论是开发包提供的算法还是我们自己设计的算法,算法在程序中都无处不在。常用的算法有查找算法和排序算法。查找算法有线性查找算法、深度优先搜索算法、广度优先搜索算法和二分查找算法,而最常用也最快速的就是二分查找算法了。二分查找算法又叫作折半查找,要求待...

weixin_39562327的博客 70

算法与数据结构 二分查找

二分查找,其要求数据序列呈线性结构,也就是经过排序的数据序列。对于没有经过排序的数据序列,可以通过排序算法来进行预排序,然后执行二分查找操作。 二分查找可以明显地提高查找的效率。其算法的操作步骤如下。 首先需要设三个变量lownum、midnum、 highnum, 分别保存数组元素的开始、中间和末尾的序号。假定有10个元素,要查找的数为x ,开始时令lownum=0,highnum=length - 1 =9, midnum =(lownum+highnum)/2=4。接着进行以下判断: (1)如果序号为

Alex_Madison的博客 942
上一篇: Java中的运算符(比较运算符,条件运算符,逻辑运算符,算数运算符)
return_bug_
博客等级 码龄2年 50粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值