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


/*
     * 数组内元素非常多的时候,用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;
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM