1、顺序查找:从第一个记录挨着向后查找,直到找到与给定关键字相同的记录,否接查找不成功。(可以在数组头设置一个与key相同的a[0],从后向前查找) O(n)
2、折半查找:需要线性表有序。O(logn)
3、插值查找:相对于折半查找,可以折1/4或更多。O(logn)
4、斐波那契查找:相对于折半查找,利用黄金分割原理实现。利用斐波那契数列选择相应的查找点。O(logn)
5、稠密索引:每一个索引项(关键字和对应记录的位置)对应一个数据集中每一个记录。索引项。索引项要根据关键字排序。
6、分块索引:将数据集分块,对每一块对应一个索引项,块索引(块中最大关键字,块中数据个数,块中第一个数据地址指针)需要有序。
7、倒排索引:索引项是次关键码(有序)和纪录号表(可以是主关键码或数据位置指针)。
8、二叉排序树:左子树都比父节点小,右子树都比父节点大。
二叉排序树的查找(递归,比父节点大查找右子树,父节点小查找左子树)。(最大查找次数是树的深度)
二叉排序树的插入(递归,比父节点大插入右子树,比父节点小插入左子树)。
二叉排序树的删除
删除叶子结点(查找到之后可以直接删除)。
删除的节点只有左子树或右子树(子承父业,与父节点相连的子结点到父节点的位置)。
删除的节点有左子树也有右子树(中序遍历中的该结点的前趋或后继继承)。
9、平衡二叉树(AVL树),原因是,在构造二叉排序树的时候可能构造成左斜树或右斜树,导致查找效率降低。(查找复杂度O(logn),插入和删除的复杂度O(logn))
最小不平衡树是距离插入结点最近且平衡因子(左子树深度减右子树深度)大于1的子树。
10、平衡二叉树的构造
找到最小不平衡数的根节点,当BF(平衡因子)大于1并且与子节点BF符号相同,右旋。
当BF小于-1并且与子节点BF符号相同时,左旋。(在旋转时要满足二叉排序树的特性)。
如果BF符号不统一,先进行旋转后统一符号,再进行相应的反向旋转。
11、多路查找树(结点中元素不止一个,子树可以有多棵):2-3树,2-3-4树,B树,B+树…(没仔细看,感觉很麻烦^_^)。
12、哈希表查找:存储位置= f(关键字)-----散列函数(Hash函数) (适合数据和存储位置一对一关系的)
根据Hash函数计算出数据应存的散列地址,并对应存储。
在查找是通过Hash函数计算出关键字的散列地址,然后访问散列地址对应的数据。
13、散列冲突(key1≠ key2,但是f(key1)= f(key2)),可以将有冲突的数据存在一个单链表中。还可以把有散列冲突的数据放在公共溢出区。
12 | 67 | 16 | 25 | 37 | 22 |
经过散列函数计算之后存储(比数据区大)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
12 | 25 |
|
| 16 |
|
| 67 |
37、22可以通过计算用单链表的形式加入、也可以进入公共溢出区、也可以进行探索填入到Hash表中空的位置。在查找是根据地址直接查数据,O(1)。