zoukankan      html  css  js  c++  java
  • 查找算法——折半查找

    折半查找的条件:为已经有序的数组。

    折半查找的思想:

    min,max为数组的最小和最大下标

    1.先取最中间的那个数(在这里声明为middle,是下标,不是值),与要查找的数进(这里声明为goal,是值)行比较,如果不相等,则进入判断;

    2.如果arr[middle]比goal大,则范围缩小到0~middle-1;

    3.如果arr[middle]比goal小,则范围缩小到middle+1~arr.length;

    4.当min>max时,说明没有找到,则返回-1;

    代码如下:

        //折半查找,arr是已经排序好的数组,goal是要查找的数,返回下标
        public static int search(int[] arr,int goal)
        {        
            int min = 0;
            int max = arr.length;
            int middle = arr.length/2;
            
            int i=0;//记录查找次数
            while(arr[middle]!=goal)
            {
                System.out.println("times:"+(++i));
                if(arr[middle]>goal)
                {
                    max=middle-1;                
                }
                if(arr[middle]<goal)
                {
                    min=middle+1;
                }
                if(min>max)
                {
                    return -1;
                }
                middle=(min+max)/2;
            }
            return middle;
        }    
  • 相关阅读:
    【CF617D】Roads in Yusland
    对偶问题
    【LG3722】[HNOI2017]影魔
    [HEOI2017] 相逢是问候
    [SHOI2009] 会场预约
    [SCOI2007] 修车
    [CTSC2008] 网络管理
    [国家集训队] 礼物
    [Poetize6] IncDec Sequence
    [网络流24题] 魔术球问题
  • 原文地址:https://www.cnblogs.com/LJP-JumpAndFly/p/4673182.html
Copyright © 2011-2022 走看看