开发工具与关键技术:
作者: 李伙
撰写时间: 2020年5月10日
一、静态查找:是指在静态查找表上进行的查找操作,查找满足条件的数据元素的存储位置或各种属性。
三种静态查找方法:(1)顺序查找 (2)折半查找 (3)分块检索
1、顺序查找:
顺序查找的基本思想:
(1)查找表的存储结构是线性表(顺序表或链表)
(2)查找过程是依次用查找条件中给定的值与查找表中数据元素的关键字值进行比较
(3)若某个记录的关键字值与给定值相等,则查找成功,返回该记录的存储位置,反之,若直到最后一个记录,其关键字值与给定值均不相等,则查找失败,返回查找失败标志。
2、折半查找:
折半查找只适用于对有序顺序表进行查找。
折半查找的基本思想:
(1)每进行一次折半查找,要么查找成功,结束查找,要么将查找范围缩小一半,如此重复。
(2)直到查找成功或查找范围缩小为空即查找失败为止。
3、分块检索:
分块查找又称索引顺序查找。它是一种性能介于顺序查找和二分查找之间的查找方法。
3.1、查找表存储结构:查找表由“分块有序”的线性表和“有序的”索引表组成。
(1)“分块有序”的线性表:线性表R被均分为若干块,每一块中的关键字不一定有序,但前一块中的最大关键字必须小于后一块中的最小关键字,即表示“分块有序”的。
(2)“有序的”索引表:抽取各块中的最大关键字及其起始位置和长度构成一个索引表ID中。
3.2、分块查找的基本思想:
(1)首先查找索引表 索引表是有序表,可采用二分查找或顺序查找,以确定待查的结点在哪一块。
(2)然后在已确定的块中进行顺序查找。
4、三种静态查找方法比较,如下图:
二、动态查找:特点:表结构本身是在查找中动态生成,对于给定值K,如表中存在,则查找成功;否则在适当的位置插入K。
动态查找的结构主要有二叉树结构和树结构两种类型。
1、二叉排序树又称为二叉查找树,它或者是空树,或者是满足如下性质的二叉树:
(1)若它的左子树非空,则左子树上所有结点的值均小于根结点的值。
(2)若它的右子树非空,则右子树上所有结点的值均大于根结点的值。
(3)它的左、右子树本身又各是一棵二叉排序树。
在二叉排序树中查找的基本思想:用给定值K与根结点关键字值比较,如果K小于根结点的值,就继续在左子树中查找,否则将继续在右子树中查找,以此方法,一直查找下去,直到查找成功或查找失败为止。
二叉排序树查找的过程描述如下:
(1)若二叉树为空树,则查找失败。
(2)将给定值K与根结点的关键字值比较,若相等,则查找成功。
(3)若给定值K小于根结点的关键字值,则在左子树中继续搜索,如果左子树为空,则查找失败。
(4)否则,在右子树中继续查找,如果右子树为空,则查找失败。
二叉排序树的查找算法描述如下图:
三、排序
1、直接插入排序的基本思想:
(1)开始时有序表中只包含一个元素,无序表中包含有n-1个元素
(2)排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表
(3)每一趟都是将一个记录插入到前面的有序段中。直到所有记录都插入到有序段中
(4)需进行n-1趟
2、直接插入排序的效率分析:
(1)从空间来看,它只需要一个元素的辅助空间。
(2)从时间分析,最少比较次数(正序)为O(n),最多比较次数(逆序)O(n2)。因此,直接插入排序的时间复杂度为O(n2)。
(3)直接插入算法的元素移动是顺序的,该方法是稳定的。
(4)适用于对排序元素较少、且基本有序的数据元素排序
3、选择排序的基本思想是:每一趟从待排序记录中选出关键字最小的记录,按顺序放到已排好序的子序列中,直到全部记录排序完毕。选择排序有两种:直接选择排序和堆排序。