数据结构这个系列是前年我准备写的系列,因为自己的懒惰一直没有全部完成这个系列,今年我要把这个系列完成,做事要有始有终。目前已经完成的是链表和排序。接下来要讲的是查找。
首先介绍几个基本概念:
查找表:由同一类型的数据元素或记录构成的集合;
静态查找表: 对查找表进行查询某个特定元素是否存在,检索某个特定数据元素的各种属性的操作时静态 查找;
动态查找表:若在查找过程中同事插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素的操作成为动态查找表;
查找:根据给定的某个值,在查找表中确定一个关键字等于给定值的记录或数据元素称为查找;
静态查找表-顺序查找:
当数据项在列表内随机排序(链表,顺序表)的时候可以使用顺序查找,当数据项在列表内有序的时候(有序表)可以采用折半查找。
下面程序是最基本的书序查找,我们从数组的第一个元素开始,遍历数组与关键码进行对比,如果找到匹配的元素返回true,否则返回false.
下面我们写个测试程序来验证该算法,可以根据输入值进行查找
按照上面的程序,如果要查找的数据元素就在集合的开始处,程序的查找就会很快,那我们改进的目标就是将频繁查找的元素移动到元素集合前部,从而提高查找的效率。因为要查找的数据大概会遵循“80-20”法则,意思是数据集合上80%的查找操作都是为了查找集合中20%的数据,所以将20%的数据放到集合的开始部分。这种概率分布较帕累托分布。
程序如下:
上面我们演示的是集合内数据无序的查找,下面我们演示当数据集合有序的时候更高效的查找方法-折半查找。它的查找过程是先确定待查记录所在的范围区间,然后逐步缩小范围知道找到或者找不到记录为止。
下面是折半查找的C#实现
下面是折半查找的演示程序,大家可以自己动手运行一下
今天我们的静态查找就到这里,下一篇我会继续介绍查找中动态查找。谢谢!