• java 二分法查找原理


    二分法查找原理:

          1、只要低位下标不大于高位下标,就进行二分查找(步骤1-3)

          2、先在有序的数组中对半查找中间的坐标,如果中标和要查找的下标相等时,找到目标数,那二分结束。

          3、如果步骤2没有找到,那就会出现先2种情况:a、中标大于find值;b、中标小于find值;

            3.1、如果中标大于find值,说明find值在中标的左边,那么高位就是此时的中标,然后继续二分

            3.2、如果中标小于find值,说明find值在中标的右边,那么低位就是此时的中标,然后继续二分

          4、如果低位下标大于高位下标:那就是没有这个想要查找的find值,且低位和高位一定是相挨着(类似:low[4],high[3],返回-5)。返回此find值本应插入的 负下标-1即:-low - 1

    二分法查找缺点:

          1、数组必须是有序的数组。

       

    二分法查找的优点:

          1、查找次数少,效率高。

    案例:

    import java.util.Arrays;
    
    public class TestBinarySearch {
        public static void main(String[] args) {
            int [] arr={5,13,19,21,37,56,64,75,80,88,92};    //数组必须是有序的
            
            int low = 0;    //低位
            int high = arr.length;    //高位
            int mid = 0;    //可以随便给中位赋值下标
            
            int find = 37;    //查找值
            
            boolean flag = false;
            
            while(low <= high){        //只要高位边不比低位小,就继续二分
                mid = (low + high)/2;    //二分后有三种情况:中位比find值大;中位比find值小;中位和find值相等
                
                if(arr[mid] > find){    //二分之后中位比find值大,说明find值在中位的右边,那么高位就是此时的中位,然后继续二分
                    high = mid - 1;
                    
                }else if(arr[mid] < find){    //二分后中位比find值小,说明find值在中位的左边,那么低位就是此时的中位,然后继续二分
                    low = mid + 1;
                }else{                        //当中位和find值相等时,找到find值所对应的下标,二分结束
                    flag = true;
                    System.out.println(mid);
                    break;
                }
                
            }
            
            if(flag){                
                    System.out.println("mid=" + mid +"========"+ "find="+ arr[mid]);                
                }else{
                    System.out.println(-low - 1);    //如果没找到,那肯定是低位大于了高位,且低位和高位相挨着,返回没有找到的find值应该所在的下标位置(即-low - 1)
                }
        }
    }
    内容
  • 相关阅读:
    首评 | 阿里云顺利完成国内首个云原生安全成熟度评估
    基于任务调度的企业级分布式批处理方案
    阿里云发布性能测试 PTS 2.0:低成本、高效率、多场景压测,业务稳定性保障利器
    OpenKruise v1.2:新增 PersistentPodState 实现有状态 Pod 拓扑固定与 IP 复用
    ZooKeeper 在阿里巴巴的服务形态演进
    阿里云微服务引擎 MSE 5 月产品动态
    应用实时监控服务ARMS 5 月功能快报&优惠汇总
    618 大促来袭,浅谈如何做好大促备战
    「技术人生」第8篇:如何画业务大图
    Serverless Job——传统任务新变革
  • 原文地址:https://www.cnblogs.com/eyjdbk/p/11028120.html
Copyright © 2020-2023  润新知