顺序查找
顺序查找适合线性表,比如说数组和链表这种线性存储结构的。
时间复杂度为O(n)
二分查找
要查找的元素必须是有序的
时间复杂度为O(logn)
插值查找
对于差值查找来说,二分查找更近似于一种傻瓜式的查找方式。因为二分查找每次都从mid开始的,这样比较呆,没有很大的自主性。
因此对于差值查找:mid=low+(key-a[low])/(a[high]-a[low])*(high-low),这种方式来自适应选择,减少比较次数
二叉查找树(BST)
二叉查找树的性质:
- 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 任意节点的左、右子树也分别为二叉查找树。
它和二分查找一样,插入和查找的时间复杂度均为O(logn),但是在最坏的情况下仍然会有O(n)的时间复杂度。
红黑树
B树和B+树
分块查找
分块查找是有序查找的一种改进吧,即把元素放到不同的块儿中。每一块儿中的节点不必有序,但是块与块之间必须有序
即第一块任意元素的关键字都必须小于第二块任意元素的关键字。
先用二分查找到在那一块,然后再进行顺序查找。
哈希查找
key - value键值对,是一种时间换空间的算法。