二分查找--java进阶day06
1.二分查找
https://kdocs.cn/l/ciMkwngvaWfz?linkname=150996908
二分查找:每一次查找都从中间的元素查起,根据比较的大小来折半,以此类推,直到最后找到该数

2.二分查找的前提
确保查找的数组是排好序的数组,否则就会出错
如下图,假设我们要找的是200,箭头指向88,发现不是200,然后比大小,88小,所以右半部分折半,接着往左边找,但实际情况就是200在右边

3.分析二分查找
1.获取中间索引
拿着最小索引和最大索引,相加再除以2即可

2.右折半max操作
如图,现在中间索引指向的元素是55,比33大,那么就应该折去左半边,接着往右半边查找

折半后,我们应该让max指向3号索引,该如何修改呢?
很简单,我们只要让mid索引-1,然后再把值赋给max就行了

3.重新计算中间索引
max发生变化后,需要重新计算mid,还是max加min除以2

4.左折半min操作
mid指向22,22比33小,所以左边折半,往右边找,min就需要重新修改

让mid加1,然后赋值给min即可

4.折半的条件
https://kdocs.cn/l/ciMkwngvaWfz?linkname=150996918
根据ppt的演示我们会知道,当min>max时,右边已经没有可以查找的元素

所以,只有当min<=max时,才可以进行折半查找
5.二分查找整体思路

6.代码演示

二分查找--java进阶day06的更多相关文章
- 数据结构之二分查找——Java语言实现
场景描述:给出一个数据序列长度为N,然后查找 一个数是否在数据序列中,若是,则返回在序列中的第几个位置. 首先可能第一个想到的就是按照顺序,从前到后一个一个进行查找,直到找到为止,若最后都没有,则说明 ...
- 数据结构和算法设计专题之---二分查找(Java版)
1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...
- 二分查找(Java)
二分查找的前提的要查找的数组必须有序. 代码如下: 程序1 public class source { public int binary_sort(int[] array, int item) { ...
- 二分查找(Java实现)
二分查找:递归实现 public class BinarySearch { /** * @param arr 代查找的数组,需要有序 * @param left 查找区间的左界限 * @param r ...
- 二分查找-Java版
/** * * 二分查找算法 * * * * @param srcArray 有序数组 * * @param target 查找元素 * * @return srcArray数组下标,没找到返回-1 ...
- 二分查找java实现
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 二分查找思路非常简单,由粗暴的遍历查找改为 ...
- 快速排序和二分查找(Java)
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] data = { ...
- 二分查找java代码
public int find(long searchKey){ int i; int begin = 0; int end = nElems - 1; while(true){ i = (begin ...
- 从三数之和看如何优化算法,递推-->递推加二分查找-->递推加滑尺
人类发明了轮子,提高了力的使用效率. 人类发明了自动化机械,将自己从重复的工作中解脱出来. 提高效率的方法好像总是离不开两点:拒绝无效劳动,拒绝重复劳动.人类如此,计算机亦如是. 前面我们说过了四数之 ...
- Java进阶(三十九)Java集合类的排序,查找,替换操作
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
随机推荐
- PS2021、色环插件Coolorus下载+色环无法拖动问题和没有压感问题的解决
PS2021+色环插件Coolorus+色环无法拖动问题解决+没有压感问题解决 1.资源下载链接 PS各版本下载: 感谢微博@vposy大佬无私奉献提供的各版本ADOBE软件直装破解: 百度网盘: p ...
- Solution Set - IQ ↓↓
Q: 为什么说雨兔是个傻子? A: 因为一路上全是星号标记. 呃, 本来的好像是 constructive || greedy, 但感觉最近整体题量不高, 就换成 2700-2900 了. 然后惊 ...
- Flutter一些概念(一)
1 简述Flutter是什么以及它的主要优势 Flutter是一种由Google开发的开源移动应用开发框架,可以用于构建高度定制化.美观并且性能卓越的移动应用程序,其主要优势有: 跨平台,一次编码,可 ...
- JAVA调用groovy脚本的方式
一.使用用 Groovy 的 GroovyClassLoader ,它会动态地加载一个脚本并执行它.GroovyClassLoader是一个Groovy定制的类装载器,负责解析加载Java类中用到的G ...
- 防止SQL注入的五种方法
1.首先看一下下面两个sql语句的区别: <select id="selectByNameAndPassword" parameterType="java.util ...
- 基于C#实现多线程启动停止暂停继续
大家好!我是付工. 大部分初学者在学习C#上位机编程时,多线程是一个很难逾越的鸿沟,不合理地使用多线程,会导致经常出现各种奇怪的问题,这也是很多初学者不敢使用多线程的原因.但是在实际开发中,多线程是一 ...
- golang1.23版本之前 Timer Reset方法无法正确使用
golang1.23版本之前 Timer Reset方法无法正确使用 golang1.23 之前 Reset 到底有什么问题 在 golang 的 time.Reset 文档中有这么一句话,为了防止 ...
- ADALM-Pluto修改芯片类型为AD9364模式
ADALM-Pluto 使用芯片AD9363(325 MHz - 3.8 GHz),但可切换至 AD9364(70 MHz - 6 GHz)模式,此篇随笔将采用串口调试的方式将 Pluto 设置为 A ...
- Linux 文件压缩和解压缩命令
Linux 文件压缩和解压缩命令 在Linux操作系统中,文件压缩和解压缩是日常管理和维护任务中的重要一环.通过压缩文件,可以显著减少存储空间的使用,并加快网络传输速度.Linux提供了多种压缩和解压 ...
- SNMP简介
复习几组概念带内管理和带外管理区别:传送的物理通道不同.1.带内管理是管理控制信息与数据信息使用统一物理通道进行传送.当网络出现故障中断时数据传输和管理都无法正常进行.2.带外管理在于通过不同的物理通 ...