博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二分查找

Posted on 2018-08-23 15:36  calpo  阅读(150)  评论(0)    收藏  举报

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

原理

1.将数据分成两部分记录两端和中点的下标

2.比较中点下标的值是否是所查找的值,如果是则输出该下标,不是则比较大小,若该值大于所查找的值则将右端点更新反之则更新左端点

3.循环操作

例如一组数组: 1 2 3 4 5 6 7 8  查找 8在数组中的下标的下标

第一次 0 3 7

第二次 4 5 7

第三次 6 6 7

第四次 7 7 7 

找到输出

    public static int bs(int[] array,int input) {
        int right=array.length-1;
        int left=0;
        int mid=(right+left)/2;
        while(array[mid]!=input) {
            if(right<left) {
                return -1;
            }
        if (array[mid]>input) {
            right=mid-1;
        }else {
            left=mid+1;
        }
        mid=(right+left)/2;
        System.out.println(left);
        System.out.println(mid);
        System.out.println(right);
        }
        return mid;    
    }