程序员

注册

 

发新话题 回复该主题

程序员常用十算法二分查找法5分钟掌 [复制链接]

1#

给我5分钟,讲明白二分查找法——

一、算法原理:

二分查找,也叫折半查找,是一种适用于顺序存储结构的查找方法。它是一种效率较高的查找方法,时间复杂度为O(lgn),但它需要注意:它仅能用于有序表中。也就是说,表中的元素需按关键字大小有序排列。

假设有如下一本页的书,给定一个页码,如何快速地找到它呢?如果一页一页逐步查找,最高是不是可能要次?但用二分法,就可以把查找的次数降到个位数。

第一步:找到1~的中位数,通过索引去找,索引是从0开始的,所以这里就是(0+)//2=,对应数值为。即:

第二步:给定一个想要查找的页码比如,将与中位数进行比较,因,则锁定左区:

第三步:求左区的中位数,方法与第一步相同,求得索引为,对应数值为。即:

第四步:将与比较,因,则锁定右区:

依次类推,最终找到页码,找到的意思就是找到页码对应的索引,这个例子里数列是1~,每次增加1,可能有些同学会感觉这还需要找吗,都可以直接看出来了。

但想象一下,实际碰到的数列不一定是等比或等差,这时候就得有一种算法快速地能定位想找的这个数的位置(即索引),通过直观去看是看不出来的。

二、Python代码实现

看懂了算法的原理介绍,代码就是算法的具现:

这段算法每个语句都加上了注释,应该很容易读懂。这里查找到第9次,就找到了对应的索引。具体运行结果为:

此外,我们可以察觉到算法的原理实际上是一个递归的过程,因为代码也可以用递归来实现:

运行结果相同,具体为:

分享 转发
TOP
发新话题 回复该主题