常见的查找算法基本可分为三类:静态查找,树形查找和哈希查找。
静态查找
静态查找可以分为三种,最简单的就是顺序查找,可以选择从后往前也可以选择从前往后进行查找。时间复杂度在1-n之间;
其次就是二分查找,二分查找要求是对一个有序的数据结构进行查找,查询复杂度在logn;
最后就是分块查找,也可以称为索引查找,查找介乎与顺序查找和二分查找之间。通过将数据划分为若干的块,每个块内的数据不必有序,但是块与块之间的数据必须保证有序,同时为所有的块建立一个索引表,通过索引表查的数据在哪个块中,然后再在块内顺序查找
树形查找
树形查找有几种不同的方式,首先是二叉查找树,左子树的任意节点小于父节点的值,右子树的值大于父节点的值,可以递归进行查找,时间复杂度在logn和n之间;
其次是B-树和B+树,平衡二叉树,红黑树等,基本上时间复杂度也在logn。
哈希查找
哈希查找是通过对待查数据取得关键字key,按照某种对应关系或者称为哈希函数的运算,获得该数据存储的位置信息。
哈希查找不可避免会出现冲突,即通过哈希函数得到的地址值不是希望查找的数据。这是由于哈希函数只是一个压缩镜像。因此伴随着哈希查找会要求一个冲突解决办法。
常见的哈希函数有:直接定值法,平方取中法,折叠法等;处理冲突有线性探测再散列,二次探测再散列,随机探测再散列等,或者是通过链地址法。