查找指定数值在数组中的位置--二分法

时间:2022-10-23 19:12:50
/*
     * 数组内元素非常多的时候,用for循环一一对比效率会变低
     * 二分法的原理,把数组从中间对折,用中间的数值与要找的对比,如果大于要找的,就说明在左边,反之在右边
     * 然后再用同样的办法,把左边的对折
     * 当出现对折后比较,既没有大于也没有小于的情况时说明,中间值就是我们的要找的,return
     */
    public static int er(int[] arr,int number){
        int da =arr.length-1;    //最大值索引
        int xiao = 0;            //最小值索引
        int zhong = 0;            //中间位
        //循环条件:只要对折之后小的比大的大的了,循环停止
        while(da>=xiao){        
            zhong = (da+xiao)/2;        //对折中间位
            if(arr[zhong]>number){
                da=zhong-1;                //当中间值大于number,number在左边,最大值-1
            }else if(arr[zhong]<number){
                xiao = zhong+1;            //当中间值大于number,number在右边,最小值+1
            }else{
                return zhong;            //相等时返回中间值,即number的索引
            }
        }
        return -1;
    }