640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | 萌蠢的小灰

责编 | 胡巍巍

640?wx_fmt=jpeg

640?wx_fmt=jpeg

—————  第二天  —————

640?wx_fmt=jpeg

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

什么意思呢?我们来举两个栗子:

给定一个有序数组 

2,5,7,9,12,14,20,26,30

Case 1:

640?wx_fmt=png

Case 2:

640?wx_fmt=png

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

 

————————————

 

640?wx_fmt=jpeg

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

为什么说这样效率最高呢?

因为每一次选择数字,无论偏大还是偏小,

都可以让剩下的选择范围缩小一半。

给定范围0到1000的整数:

640?wx_fmt=png

第一次我们选择500,发现偏大了,

那么下一次的选择范围,就变成了1到499:

640?wx_fmt=png

第二次我们选择250,发现还是偏大了,

那么下一次的选择范围,就变成了1到249:

640?wx_fmt=png

第三次我们选择125,发现偏小了,

那么下一次的选择范围,就变成了126到249:

640?wx_fmt=png

以此类推,最坏的情况需要猜测多少次呢?

答案是 log1000 = 10次,

也就是让原本的区间范围进行10次 “折半”。

刚才我们所分析的是猜数字的游戏。

如果我们把场景转换成最初的面试问题:

在包含1000个整型元素的有序数组中查找某个特定整数,

又该如何去做呢?

同样道理,

我们可以首先判断下标是499的元素(因为数组下标从0开始,到999结束),

如果元素大于要查找的整数,

我们再去判断下标是249的元素,

然后判断下标124的元素......

以此类推,直到最终找到想要的元素,

或者选择范围等于0为止。

上述这个过程,

就是所谓的二分查找算法,

查找的时间复杂度是log(n)。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

public static int binarySearch(int []array,int target){	
    //查找范围起点	
    int start=0;	
    //查找范围终点	
    int end=array.length-1;	
    //查找范围中位数	
    int mid;	
    while(start<=end){	
        //mid=(start+end)/2 有可能溢出	
        mid=start+(end-start)/2;	
        if(array[mid]==target){	
            return mid;	
        }else if(array[mid]<target){	
            start=mid+1;	
        }else{	
            end=mid-1;	
        }	
    }	
    return -1;	
}	
public static void main(String[] args) {	
    int[] array = new int[1000];	
    for(int i=0; i<1000;i++){	
        array[i] = i;	
    }	
    System.out.println(binarySearch(array, 173));	
}

 

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

 

640?wx_fmt=png

 

640?wx_fmt=jpeg

 

640?wx_fmt=jpeg

本文仅代表作者的观点,不代表 CSDN 立场。

牛了,这几个案例让你迅速掌握AI技术!

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

【End】

 

640?wx_fmt=jpeg

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

640?wx_fmt=jpeg

 热 文 推 荐 

极客头条

阿里撬得动“印度版”抖音吗?

苹果 SwiftUI 踢馆谷歌 Flutter!

☞惊!为拯救美国落伍的 STEM 教育,纷纷出手教老师编程?!

程序员爬取 42 年高考数据,告诉你高考为什么这么难?

☞把病毒写到区块链上可以永远不死? 我们做了一个大胆的实验…… | 技术头条

新一代私有云来了!看透基于开源生态的产品化

☞Python实现生命游戏

B站超全分享!2万人收藏的免费计算机科学速成课

☞敲代码时,程序员戴耳机究竟在听什么?

640?wx_fmt=png你点的每个“在看”,我都认真当成了喜欢640?wx_fmt=png

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐