关于快速查找法(折半/二分查找法)解释(一次记住)binarysearch

关于快速查找法(折半/二分查找法)解释(一次记住)binarysearch

简单说就是折半再折半,很内容理解。

目的:看一次,永远记住。(妈妈再也不用担心我不会写查找了)

难点:low,high操作。

    @Test
    public void binarySearch() {
        //数组一定要是顺序的。
        double arr[] = {0.0, 0.001, 0.1, 0.2, 0.3, 0.4, 0.5, 1.0, 2.0, 3.0}
        double key = 0.3;
        int low = 0;
        int high = arr.length - 1;

        while (low <= high) {
            int mid = (low + high) / 2;
            double midVal = arr[mid];

            if (key > midVal)//大在high区,把low往上抬,砍掉low区
                low = mid + 1;
            else if (key < midVal)//小在low区,把high往下压,砍掉high区
                high = mid - 1;
            else {
                System.out.println(key + "的位置是" + mid); 
                return;//--------找到了退出
            }
        }

        System.out.println(-(low + 1));//没找到,返回负数
    }

当key大于的midVal的时候说明key在high区

low区的数据就放弃了,怎么放弃low区?直接把最low的位置指到mid的位置就行了,但还不够,还要多移一位才行(low=mid+1)。

这样取值的区间就变成high区的了mid+1的位置到high。然后再折半。这时可能跑过头了,再往回跑(high=mid-1)就行了。

只要记住key在高区就把low往上抬,key在低区就把high往下压就行了。(为什么要mid+1或者-1,不直接等于mid?因为mid已经和key比较过了)

核心就是解决low,high的操作,理解了这个操作,快速查找就不是问题。

 

简单粗暴

如图:其实就是排除法,不停的干掉区域,通过不停移动low和high的位置,收缩范围,最后找到。

关于快速查找法(折半/二分查找法)解释(一次记住)binarysearch

mid=(low+high)/2 或者牛逼刺啦带火花写成mid=(low+high) >>> 1

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100406.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微型计算机原理与接口技术网课_微机原理接口技术答案

    微型计算机原理与接口技术网课_微机原理接口技术答案spContent=课程面向有志于从事计算机过程控制系统设计、或对计算机硬件结构感兴趣的学习者。总体目标是:具备输入/输出接口控制系统软硬件初步设计能力。课程以“家庭安全防盗系统”案例引导,主要介绍:计算机基础知识、微型机基本工作原理、80×86基本指令集、汇编程序设计、存储器接口设计、接口控制技术等。——课程团队课程概述在今天的信息化时代,计算机已成为了人类工作和生活中必不可少的一部分。计算机…

    2022年10月2日
    2
  • Android 单元测试之UI测试

    Android 单元测试之UI测试Android 单元测试之 UI 测试 UI 测试 Espresso 官网地址 Espresso 是 Google 官方的一个针对 AndroidUI 测试的库 可以自动化的进行 UI 测试 Espresso 可以验证 View 的可见性 文字显示是否正确 图片是否正确 位置等等 相对于人工测试 Espresso 覆盖更全 测试速度更快 UI 测试分为三个部分 ViewMatcher ViewAction ViewAssertio 一般的测试流程就是按照上面图示的步骤来进行 首先匹配到 UI 组

    2025年11月28日
    3
  • java 远程debug_idea如何debug

    java 远程debug_idea如何debug使用IDEA远程Debug线上服务应用背景配置过程IDEA配置服务启动配置应用方法注意事项应用背景通常情况下我们会遇到只有线上环境才能复现的bug,此时通过在代码里面加日志重新发布,反复定位对线上的客户体验极度不好,此时我们可以使用IDEA的远程Debug功能,对线上bug调试。配置过程该过程需要本地环境和线上环境至少保证指定端口互通,该端口指的是线上debug对项目的监听端口。IDEA配置首先在IDEA上进行配置,进入项目启动面板,Edit-config中设置点击”+“号选中”Remo

    2025年8月28日
    6
  • StringUtils里面的 isEmpty方法和isBlank方法的区别[通俗易懂]

    StringUtils里面的 isEmpty方法和isBlank方法的区别[通俗易懂]写在前面:我是扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。这博客是对自己学习的一点点总结及记录,如果您对Java、算法感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。文章目录1、isEmpty()方法2、isBlank()方法3、总结1、isEmpty()方法源码:…

    2022年6月11日
    38
  • Nacos整合SpringCloud(配置中心、注册中心)[通俗易懂]

    Nacos整合SpringCloud(配置中心、注册中心)[通俗易懂]1.什么是Nacos?Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。2.Nacos配置中心整合2.1启动NacosServer并添加配置1.下载地址:直接下载:NacosServer下载页源码构建:Github项目页面2.启动Linux/Unix/Mac操作系统,执行命令shstartup.sh-ms…

    2022年6月6日
    52
  • linux心跳出血漏洞,heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)[通俗易懂]

    linux心跳出血漏洞,heartbleeder 自动检测 OpenSSL 心脏出血漏洞 (附修复指南)[通俗易懂]heartbleeder可以探测你的服务器是否存在OpenSSLCVE-2014-0160漏洞(心脏出血漏洞)。什么是心脏出血漏洞?CVE-2014-0160,心脏出血漏洞,是一个非常严重的OpenSSL漏洞。这个漏洞使得攻击者可以从存在漏洞的服务器上读取64KB大小的内存信息。这些信息中可能包含非常敏感的信息,包括用户请求、密码甚至证书的私钥。据称,已经有攻击者在某宝上尝试使用漏洞…

    2022年7月16日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号