美文网首页
java算法_二分法

java算法_二分法

作者: 王康健_0124 | 来源:发表于2019-04-11 10:38 被阅读0次
    //二分法:
    // 数组的长度/2,然后拿这个从数组中取数做对比,如果小就改长度大小为当前二分的数字的大小,
    // 但是如果大怎么办?需要从当前的位置和length长度之间二分,做好的方式,取两个变量,一个代表数组中最小的下标,一个最大
    //0   length-1    比二分小就改变length-1的长度,比二分的数字大,修改 最小下标
    public static void main(String[] args) {
        int[] arry = {-1,0,3,7,9,12,34};
        int flag = BinarySearch(8, arry);
        System.out.println(flag);
    }
    public static int BinarySearch(int key, int[] arry) {
        int left = 0;//下标0的定义
        int right = arry.length - 1;//数组长度最大下标
        while (left <= right) {//如果最小下标等于最大下标,执行
            int mid = (left + right) / 2;  //算出二分后下标的值:length中间一半
            if (key < arry[mid]) {//如果找的值小于二分下标的值
                right = mid - 1;//二分的下标-1,最小的下标不需要变,因为二分的下标已经使用了,所以-1
            } else if (key > arry[mid]) {//如果查找的值大于二分下标的值,执行
                left = mid + 1;//修改最小下标,当前下标+1 ,最大下标不变
            } else {//如果要找的值不大于,也不小于二分的值,肯定就是等于咯,直接返回下标就可以了
                return mid;
            }
        }//如果不在数组中,最后会出现最小下标大于最大下标,不满足while条件,返回一个错误编号
        return -1;
    }

相关文章

网友评论

      本文标题:java算法_二分法

      本文链接:https://www.haomeiwen.com/subject/ehgziqtx.html