关于快速查找法(折半/二分查找法)解释(一次记住)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)
上一篇 2021年5月12日 下午7:00
下一篇 2021年5月12日 下午8:00


相关推荐

  • 如何利用计算机模拟分子生物学,分子生物学软件教学的经验浅谈.doc

    如何利用计算机模拟分子生物学,分子生物学软件教学的经验浅谈.doc分子生物学软件教学的经验浅谈分子生物学软件教学的经验浅谈摘要:分子生物学是生命科学和生物技术的基础学科,其教学尤其是实验教学得到了各个高等院校的普遍重视,但是对于应用性强的分子生物学软件的教学却长期以来受到忽视。笔者首次在厦门大学的夏季短学期中开设《分子生物学常用软件的应用》课程已有五余年,本文总结了分子生物学软件教学的经验,提出教学改进的建议,阐述了软件应用与实验设计的必要联系,为生物医学类学科…

    2022年7月11日
    25
  • GLM-4.5 发布,六大主流模型混战测评,谁能一键生成“ 真·可用 ”的应用?

    GLM-4.5 发布,六大主流模型混战测评,谁能一键生成“ 真·可用 ”的应用?

    2026年3月12日
    2
  • Java类加载器总结

    Java类加载器总结1 类的加载过程 nbsp JVM 将类加载过程分为三个步骤 装载 Load 链接 Link 和初始化 Initialize 链接又分为三个步骤 如下图所示 1 装载 查找并加载类的二进制数据 2 链接 验证 确保被加载类的正确性 准备 为类的静态变量分

    2026年3月18日
    2
  • linux卸载mysql(完全卸载)[通俗易懂]

    linux卸载mysql(完全卸载)[通俗易懂]//rpm包安装方式卸载查包名:rpm-qa|grep-imysql删除命令:rpm-e–nodeps包名//yum安装方式下载1.查看已安装的mysql命令:rpm-qa|grep-imysql2.卸载mysql命令:yumremovemysql-community-server-5.6.36-2.el7.x86_64查看mysql的其它依赖:rpm…

    2022年6月29日
    29
  • SNMP TRAP_Bootstrapping

    SNMP TRAP_Bootstrapping一、什么是SNMPTRAPSNMPtrap(SNMP陷阱):某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询。在网管系统中,被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。正如人们用中断通知CPU数据的到达,而不是让CPU进行轮询一样。Trap通知是更加合理的选择。用一句话来说的话,SNMPTrap就是被管理设备主动发送消息给

    2022年8月20日
    14
  • c语言表白用代码(1)

    c语言表白用代码(1)不多说,直接上代码,有用拿走,侵权立删。希望大家尽早找到自己的另一半。#include&lt;stdio.h&gt;#include&lt;math.h&gt;#include&lt;stdlib.h&gt;#defineI20#defineR340#include&lt;string.h&gt;intmain(){charanswer[4];…

    2022年7月25日
    40

发表回复

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

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