全部数据结构、算法及应用课内模板请点击:https://blog.csdn.net/weixin_44077863/article/details/101691360
静态查找有三种方式
一是O(n)的顺序查找(这个就不讲了吧
二是二分(折半)查找
三是分块查找
讲一下二分查找
就是对一个有序的顺序表用二分法查找
(这里说一下,这个数组的下标无论从0开始还是从1开始还是从几都没所谓 mid=(l+r)/2,l,r整体小1,那么mid正常地小1,于是对结果无影响)
直接举个例子来讲就是
下标1到11的十个数
10 13 17 23 38 46 54 65 82 89 92 查找23
起始 l 指向1 ,r 指向 11
mid=6
发现 a[mid] = 46 > 23
说明 [mid , r] 区间都不符合要求
接下来查找 [l , mid-1] (即令 r = mid -1 )
l=1 r=5 mid=3
然后 l=4 r=5 mid=4
然后就找到了
然后再说下考试可能考的折半查找法的判定树
(偷个懒不做图了QAQ,简单文本画一个QAQ,里面的x不要管他,我为了看着方便,事实上就是空的
这个判定树是什么呢
6
3 9
1 4 7 8
2 x 5 x 8 x 11 x
第一次 mid 是 6,l=1 r=11
接下来 要么 r=5 要么 l=7
然后 mid 要么等于 3 要么等于 9
就是这样画出一棵可能的 mid 的树
然后我们查找23的时候相当于走了路径 6->3->4
接下来讲一下分块查找
分块就是顺序和二分的折中
要求按块有序
就是说块内无序,块块间的索引有序
找块二分,块内线性
然后算法复杂度分析就很简单了我就不说了
具体实现看个图理解下就好,也不多说了