数据结构之分块查找

字典就是一种分块查找,也可以叫索引

在这里插入图片描述
试想:
给你一本没有索引的字典,里面全部乱序,那么我们不得不用最低级的顺序查找法查找单词,即一页一页地翻,一个一个地对比,费时费力,给你一天时间可能都找不到某一个词…

而有了分块这种操作,将首字母相同的单词放在一个集体里,查找起来可以帮助我们快速定位,效率大大提高,这就是分块查找。


例子:
在这里插入图片描述
如果我们按照这个样子建立起索引表,那么查找过程就非常轻松了。注意:索引查找要求块间有序即第二块里面的所有元素都比第一块里面大,第三块里面的所有元素都比前两块大。

比如上图查找44,我们可以先根据索引表,查找到应该从7号位置开始查找,然后在第二块内部顺序查找即可。

当然,如果块内是有序的,那么我们在块内可以使用折半查找法代替顺序查找。


分块查找的效率分析:

它比顺序查找快,但比折半查找慢。

它的时间开销分为两部分,1.查找索引表;2.在块内进行顺序查找


分块查找的优缺点分析:
在这里插入图片描述
在这里插入图片描述
分块查找要求块间有序,折半查找要求严格有序

在这里插入图片描述 注意,折半查找无法使用线性链表,不是说它不能用链表实现,而是没有必要。首先是因为单链表不具有双向性。 其次就算用双向链表,但链表也不能像数组一样随机存取,因此给链表的数据用折半查找沦为鸡肋,还不如直接用顺序