文章目录
- [1. 查找](#1. 查找)
- [2. 顺序查找](#2. 顺序查找)
- [3. 折半查找](#3. 折半查找)
- [4. 分块查找](#4. 分块查找)
- [5. 二叉排序树](#5. 二叉排序树)
1. 查找
1. 查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。
2. 查找表:用于查找的数据集合称为查找表。 (1) 静态查找表:一个查找表的操作只涉及查找操作,无须动态地修改查找表。 (2) 需要动态地插入或删除的查找表。
3. 关键字:数据元素中唯一标识该元素的某个数据项的值。
使用基于关键字的查找,查找结果应该是唯一的。例如,在由一个学生元素构成的数据集合中,学生元素中 "学号" 这一数据项的值唯一标识一名学生。
2. 顺序查找
1. 顺序查找又称线性查找,它对顺序表和链表都是适用的。对于顺序表,可通过数组下标递增来顺序扫描每个元素;对于链表,可通过指针 next 来依次扫描每个元素。
2. 顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的线性表的顺序查找。
- 一般的线性表的顺序查找:(1) 从线性表的一端开始,逐个检查关键字是否满足给定的条件。(2) 若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置。(3) 若已经查找到表的另一端,但还没有查找到符合给定条件的元素,则返回查找失败的信息。
- 有序线性表的顺序查找:若在查找之前就已知表是关键字有序的,则查找失败时可以不用再比较到表的另一端就能返回查找失败的信息,从而降低查找失败的平均查找长度。
3. 折半查找
1. 折半查找又称二分查找,它仅适用于有序的顺序表。
2. 折半查找的基本思想:(1) 首先将给定Key与表中的中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置。(2) 若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分,然后在缩小的范围内继续进行同样的查找。(3) 重复上述步骤,直到找到为止。
注:当折半查找算法选取中间结点时,既可以采用向下取整,又可以采用向上取整。但每次查找的取整方式必须相同。
4. 分块查找
1. 分块查找又称索引顺序查找,它吸取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找。
2. 分块查找的基本思想:将查找表分为若干子块。块内的元素可以无序,但块间的元素是有序的,即第一块中的最大关键字小于第二个块中的所有记录的关键字,第二块中的最大关键字小于第三个块中的所有记录的关键字,依次类推。
5. 二叉排序树
1. 二叉排序树的特性:(1) 若左子树非空,则左子树上所有结点的值均小于根结点的值。(2) 若右子树非空,则右子树上所有结点的值均大于根结点的值。(3) 左、右子树也分别是一棵二叉排序树。
2. 二叉排序树的查找是从根结点开始,沿某个分支逐层向下比较的过程。若二叉排序树非空,先将给定值与根结点的关键字比较,若相等,则查找成功;若不等,小于根结点的关键字则在左子树查找,否则在根结点的右子树上查找。