JAVA实现二分法查找算法

news/2024/11/16 11:53:18/

现实生活中经常会遇到将具有某个特征的元素选择出来,并找出对应的位置。

现在来一个小测验,在以数组【1,4,8,3,0,7,56】中找到8所在的位置,很明显大家可以通过直观的感受就可以找到8处于位置3上。

现在换一组数据,【2,6,9,....,3,78,34】,总共有3000个元素,要求找到3这个元素处在的位置,可见从只管感受上不能选择出来。那么有没有更好的办法解决这个问题呢?

针对这个问题,二分法查找算法就能够很好的解决这个问题。接下来先了解二分法原理

二分法原理:
        1. 设置查找区间:low = 0;high= n(n是查找数组的长度);
        2. 若查找区间[low, high]不存在,则查找失败;否则转步骤3
        3. 取中间位m= (low + high) / 2;比较 target 与 array[mid](其中target是目标,array是数组),有以下三种情况:
                A. 若 target < array[m],则high = m - 1;查找在左半区间进行,转步骤2;
                B. 若 target > array[m],则low = m + 1;查找在右半区间进行,转步骤2;
                C. 若 target = array[m],则查找成功,返回 m值;
这里要注意,二分法查找的线性表中的元素必须是有序的。

总的来说,二分法查找是一种区间折半逼近的方法,通过取中间点判断目标值是否在中间点的前面还是后面或者中间,进而缩小范围。

当确定在前半部分或者后部分之后,在对前或后半部分再一次取中间点,依次下去,直到找到目标值。

可以说,二分法的原理具有简单高效的效果。

下面给出以java编写的二分法查找算法的实现代码:

package algorithm;
// 实现二分法查找算法
public class Two_Find_algorithm {public static void main(String[] args) {//创建一个数组int [] array={1,5,9,15,36,39,41,42,49,50,58};int targe=49;int index=FindBary(array,targe);//打印结果//System.out.println(array);System.out.println("目标值所在位置索引为:"+index);}//构造FindBary方法public  static int FindBary(int [] a,int t) {//获取边界int l=0,r=a.length,m;while(l<=r) {m=(l+r)/2;if(a[m]==t){return m;}else if(a[m]>t){r=m-1;}else {l=m+1;}}return -1;}
}

显示结果:

目标值所在位置索引为:8

matlab:一种有效的差分进化算法解决多目标优化问题(简称MODEA)


http://www.ppmy.cn/news/1010167.html

相关文章

Linux 系统编程 开篇/ 文件的打开/创建

从本节开始学习关于Linux系统编程的知识&#xff01; 学习Linux的系统编程有非常多的知识点&#xff0c;在应用层面&#xff0c;很重要的一点就是学习如何“用代码操作文件来实现文件创建&#xff0c;打开&#xff0c;编辑等自动化执行” 那如何自动化实现对文件的创建&#…

学python的心得体会1000字,学python的心得体会2000字

这篇文章主要介绍了学python的心得体会2000字&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1. 初学者应该从简单的练习开始&#xff0c;先掌握基本的语法和概念&#xff0c;…

【网络基础实战之路】基于三个分公司的内网搭建并连接运营商的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS&#xff1a;本要求基于…

6年资深测试整理,接口测试总结,你不知道的都在这了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 接口测试 是测试…

如何将 dubbo filter 拦截器原理运用到日志拦截器中?

业务背景 我们希望可以在使用日志拦截器时&#xff0c;定义属于自己的拦截器方法。 实现的方式有很多种&#xff0c;我们分别来看一下。 拓展阅读 java 注解结合 spring aop 实现自动输出日志 java 注解结合 spring aop 实现日志traceId唯一标识 java 注解结合 spring ao…

Java - 两种判断闰年的方法

&#x1f914;️判断一个年份是否是闰年的常规方法是遵循以下规则&#xff1a; 如果年份能够被4整除&#xff0c;但不能被100整除&#xff0c;那么它是闰年。如果年份能够被400整除&#xff0c;那么它也是闰年。 boolean b1 (y & 3) 0 && ((y % 100 ! 0) || (y %…

Netty:通过Channel发送ByteBuf的数据,只发送可读的字节

说明 使用Netty Channel发送数据的时候&#xff0c;如果发送的数据存放在ByteBuf中&#xff0c;那么只会发送ByteBuf中可读的字节。即便容量&#xff08;capacity&#xff09;大于可读字节数&#xff0c;那也不会多发送数据。 示例 代码片段 package com.thb.power.termina…

嵌入式开发学习(STC51-13-温度传感器)

内容 通过DS18B20温度传感器&#xff0c;在数码管显示检测到的温度值&#xff1b; DS18B20介绍 简介 DS18B20是由DALLAS半导体公司推出的一种的“一线总线&#xff08;单总线&#xff09;”接口的温度传感器&#xff1b; 与传统的热敏电阻等测温元件相比&#xff0c;它是一…