一、概述
在一堆数据里面找出自己需要的元素,这种需求可以说是最基础的需求之一,任何程序都会有所涉及。如果程序的查找算法设计的很精妙,那么整个程序的性能就会有显著的提升。今天就来分享两种常用的查找算法。
二、算法复杂度分析
关于查找最容易想到的一种实现方式就是将一组数据中的每个元素逐个取出来和目标值比较,如果取出来的元素和目标值相同那就说明找到了,这种查找算法叫做顺序查找法,其复杂度为O(N)。二分查找就是:在一组数据中取出中间的那个元素,将其和要找的元素对比,如果不是要找的元素,则以其为标记点,将这组数据分成两半,取出符合条件的一半递归进行如上操作直到找出数据为止。二分查找的复杂度为O(logN),在数据量小的情况下这两种查找算法的效率相差无几,但是在数据量很大的情况下,二分查找的性能就远远高于顺序查找了。下面我们通过一个简单的类比来说明一下两者性能上的差距。
我们现在想让厚度为1毫米的纸来连接地球和月球,通过百度我们查到地球到月球的距离为38.4万千米,如果我们一张一张的叠加纸张,则需要叠加384000000000次才能达到月球,这是一个相当庞大的数据了,但是如果我们用一张纸对折的方法试试呢?结果你们可能想象不到,如果用对折的方式只需要39次就已经超过地月距离了,上述例子中前者一张一张叠加的方式就相当于顺序查找,而后者就相当于二分查找,从以上分析的两个数字中可以很明显的看到两者之间的差距。分析完效率之后,我们开始用代码实现。
三、代码实现<