关于快速查找法(折半/二分查找法)解释(一次记住)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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab中如何调用lm算法,lm算法的matlab实现「建议收藏」

    matlab中如何调用lm算法,lm算法的matlab实现「建议收藏」inlm’);%下面使用遗传算法对网络进行优化P=XX;T=YY;R=size(P,1);S2=size(T,1);S1=25;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码……实现nfc95p算法的matlab程序_数学_自然科学_专业资料。cleara…{on}|off]例子1用matlab实现对fmsinsin2…lm1;…

    2022年9月30日
    5
  • java输出结果保留两位小数,经典好文

    java输出结果保留两位小数,经典好文前言面试技巧另外开篇再说,先上面试干货吧。面试的题目并不一定有严格的顺序关系,有的是从前一个问题延伸而来,(探究的是一个知识的深度),有的是考察面试者的知识广度、有的纯粹是我想到哪里写到哪里的啦。。不要太在意哈,最近工作有点忙。基础知识RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,它是使用Erlang语言来编写的,并且是基于AMQP协议的;RabbitMQ高性能的原因Erlang语言在交换机的交互方面性能优秀的(Erlang语言最初在于交换机领域

    2022年7月8日
    26
  • 搭建大众点评CAT监控平台

    搭建大众点评CAT监控平台

    2021年6月14日
    118
  • 列表生成式/生成器/迭代器

    列表生成式/生成器/迭代器

    2021年6月21日
    128
  • Java 数组转list_java定义list数组

    Java 数组转list_java定义list数组方式一String[]array={“111″,”222″,”333”};Listlist=Arrays.asList(array);//list.add(“444”);list.remove(0);如上图所示,不可进行新增或删除元素的操作。Arrays.asList(array),返回的List是具有固定长度的私有静态内部类java.util.Arrays.ArrayList,所以…

    2022年8月23日
    7
  • nginx配置访问本地静态资源

    nginx配置访问本地静态资源nginx作为一款高性能的服务器,用途很多,除了可以做后端服务器的代理,负载均衡之外你,还有一个用途就是做静态资源的缓存服务器,比如在前后端分离的项目中,为了加速前端页面的响应速度,我们可以将前端的相关资源,例如html,js,css或者图片等放到nginx指定的目录下,访问的时候只需要通过IP加路径就可以实现高效快速的访问,下面说说如何在windows下使用nginx作为静态资源服务器,1、……

    2022年7月14日
    160

发表回复

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

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