基础篇(二分查找)

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

查找过程

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

算法要求

1.必须采用顺序存储结构

2.必须安装大小有序的顺序结构

java代码:

1,如果是单数取中间
2,偶数取中间靠左边

    public static void main(String[] args) {
    int[] aa={1,5,8,11,19,22,31,35,40,45,48,49,50};//定义一个有序数组
    int age=48;//需要获取的值
    int length = aa.length;
    for (int i = 0; i < aa.length; i++) {
        int bb=((i+length)>>>1);//i+数值长度向右取余一位数相当于除2
        if(aa[i]==age){//判断数组i是否等于要获取的值
            System.out.println(i);
            return;
        }else if(age>aa[bb]){//判断获取的值是否大于中间的值,如果是大于那中间的值减一保证是单数,然后赋值个i从中间的值减一开始查找
            i=bb-1;
        }else {
            length=bb+1;//判断获取的值是否小与于中间的值,如果小与索引长度+1
        }
        System.out.println(aa[bb]);//查看折半的数据
    }
    System.out.println("-1");//如果都没有找到返回-1
}

习题:

image.png

注意:

1,目前介绍的二分查找是以jdk中Arrays.binarySearch的实现作为讲解示范
2,但实际上二分查找有许多诸多的变化,一旦使用变体的实现代码,则左右边界的选取会有变化

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

推荐阅读更多精彩内容