1. 顺序查找
从指定起点处的元素开始依次查找,直到找到满足条件的目标值结束。
平均时间复杂度:O(n/2)
最坏情况:O(n)
2. 二分查找
二分查找的原理是将当前的查询的集合从中点处拆分为两个子集,然后将中点处的值与目标值进行比较,确定目标值所在的子集,再对这子集再次进行拆分,直到找到目标元素或者集合无法拆分时结束。
仅适用于按值排序的集合,对于无序集,必须先进行排序。
时间复杂度:O(log2(n))
3. 插值查找
在二分查找的基础之上,继续进行优化,使查找更具备自适应性,优化后时间复杂度可以达到O(log2(log2(n)))。
使用条件:序列单调且元素分布均匀。(通常只用二分查找就够了)
4. 分块查找
原理是将序列划分成若干子块,对于被查找的元素,先找到所在的子块,然后再在子块内进行顺序查找。这样可以跳过许多不必要的查找,提升顺序查找的效率。
5. 哈希查找
原理是通过一个散列函数将元素值与存储地址(数组的下标)对应起来,这样可以通过O(1)的时间直接查找指定元素,是一种“空间换时间” 的思想。
6. 树表查找
二叉查找树(BST – Binary Search Tree)的原理是先根据待查找的数据创建一棵树,在保证每个节点的左分支小于右分支的条件下,不断插入元素。查找时将被查找的值依次与树上的父节点比较大小,确定被查找的值所在的分支。