排序与查找不管是在Excel领域,还是其他领域,例如C语言,都有着很高的使用率。学会了这个技能,我们做起事情来更加方便快捷,省去不少时间,效率倍增。下面我们就来介绍一下折半查找在Excel函数里面的运用。 折半查找 又称之为二分查找,它要求目标数组中的数据是有序排列的。优点是比较次数少,查找速度快,平均性能好,适用于不经常变动而查找频繁的有序列表。下面先来看看下面的流程图。
为了便于大家理解,我作几点说明: ①将需要查找的值与中间值(也叫做中位值)进行对比; ②大于中位值时,以中位作为边界,继续在其右侧取新的中位值继续对比; ③小于中位值时,以中位作为边界,继续在其左侧取新的中位值继续对比; ④等于中位值时,依次判断其右侧数值是否继续相等,直到不相等时返回最后一个相等的数值; ⑤当中位位置与边界重叠时,中止对比,此时如果查找值大于中位值,则返回中位值;如果查找值小于中位值,则返回中位左侧数值。如果左侧数值不存在,返回#N/A。 流程图大致的介绍就是如此,不知道我描述是不是清楚,这只是一个算法而已,不懂也不需要太过深入研究。当数据个数为偶数时,中位等于个数除以2;数据个数为奇数时,中位等于<个数+1>除以2 案例剖析 ①如下图所示,给出了一连串升序排列的数组,我们要找出33这个数。按照上面的介绍,我们知道中位值为24.
②第一次比较,因为33>24,所以锁定第二次查找范围在中位值的后面,而不是前面,前面的数字都比24小,不可能找得到33. ③第二次比较,中位值变为了31,33>31,继续找后面的。 ④依次类推,直到找到数字或者整个数组被查找完毕,没有找到则会返回#N/A 现在或许大家还在疑问为什么要是一个有序的序列才可以进行折半查找?下面这张图,与之前的图对比一下,你就知道了。
Excel中也有类似的函数,LOOKUP,我们要查找74,但是用LOOKUP函数计算出来的结果却是49,下面就来分析一下。
①第一次比较74小于116,所以开始往前查找。 ②中位值变为50.74大于50,向后查找。 ③74又大于47,依旧向后。 ④最后只剩下一个49了,这就是函数的返回值。 |