文章目录
- 顺序查找
- 二分查找
- 索引查找
- 分块查找
静态查找指的是只对表执行查找操作,并不会动态添加元素
顺序查找
在无序的序列中使用顺序查找,查找速度是最慢的。
在顺序 {1,2,3,4,5,6,7,8,9}中查找5元素的位置 :
二分查找
在有序的序列中使用二分查找,二分查找的速度是静态查找中最快的,
索引查找
索引查找的查找过程:首先在索引表中查找关键字 key 对应的位置,然后根据这个位置可以获得此位置对应的序号,此序号就是对应主数据表的索引。
索引表pos:
地址 | 索引关键字 | 对应的序号 |
0 | 202101 | 1 |
1 | 202103 | 2 |
2 | 202105 | 0 |
主数据表Main:
地址 | 关键字 | 其他数据信息 |
0 | 202105 | … |
1 | 202101 | … |
2 | 202103 | … |
注意:索引表的索引关键字最好是有序的,我们可以在索引表中使用 二分查找。
例如,查找 202103 对应的学生:
- 通过索引表查找 202103,利用二分查找,找到之后,它所对应的序号2,就是主数据表对应此项的索引下标。
分块查找
思路: 把主数据表的元素分成若干块,每一块的元素可以是无序或者有序的,但是块与块之间的元素一定是有序的,块有一个单独的关键字,前一个块的关键字必须大于(小于)后一个块的关键字。
数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
- 把他们分块:[1 2 3 4] [5 6 7 8] [9 10 11 12] [13 14 15 16] [17 18 19 20],一共有五个块。
- 每一块都具有关键字(用于查找),low和high来存储这一块内的最小和最大下标。
关键字 | low | high |
4 | 0 | 3 |
8 | 4 | 7 |
12 | 8 | 11 |
16 | 12 | 15 |
20 | 16 | 19 |
- 把每一块的关键字当作一组数,二分查找块关键字(4,8,12,16,20),当查找到了一个数字大于前一个块,并且小于后一个块,转而到块内寻找此数据(如16: 12,13,14,15)。