数组二分查找

二分查找
1.定义3个下标
lo=0
hi=a.length-1
mid先复制
2.当lo<=hi
3.计算中间位置mid=(lo+hi)/2
4.比较中间位置mid的值>t,hi定位到mid-1
5.如果mid的值<t, low定位到mid+1
6.否则,直接返回mid的值
7.找不到数据,返回特殊值-1

import java.util.Arrays;
public class ErFen {

    public static void main(String[] args) {
        int []a={11, 46, 56, 56, 94};
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
        int t=46;
        //二分查找
        int index=binarySearch(a,t);
        if(index!=-1)
        System.out.println(index);
        else
            System.out.println("没找到");
        
    }

    private static int binarySearch(int[] a, int t) {
        /*
         * 46
         * 
         * 中间mid=(lo+hi)/2
         * [11, 46, 56, 56, 94]
         *  lo                
         *                   hi
         *          mid
         *          
         *   lo 
         *          mid
         *       hi
         *       
         *   1.定义3个下标
         *   lo=0
         *   hi=a.length-1
         *   mid先复制
         *   2.当lo<=hi
         *        3.计算中间位置mid=(lo+hi)/2
         *        4.比较中间位置mid的值>t,hi定位到mid-1
         *        5.如果mid的值<t, low定位到mid+1
         *        6.否则,直接返回mid的值
         *   7.找不到数据,返回特殊值-1
         */
        int lo=0,hi=a.length-1;
        int mid;
        while(lo<=hi){
            mid = (lo+hi)/2;
            if(a[mid]>t)//中间位置大
            {
                hi=mid-1;
            }
            else if(a[mid]<t)//中间位置小
            {
                lo=mid+1;
            }
            else
            {
                //找到了
                return mid;
            }
            
        }
        return -1;
    }

    
}

运行结果

[11, 46, 56, 56, 94]
1
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容