Bootstrap

数组算法--分块查找

目录

一.前言

二.算法的核心思路


一.前言

        前面我们已经学习了二分查找和插值查找,它们都要数据一定要有顺序。而当我们的数据无序的时候,我们可以使用最基本的顺序查找。那要是我们的数据既包含有序的数据又包含无序数据的时候又该怎么查找呢?这就是我们今天要讲的分块查找。

二.算法的核心思路

       分块查找顾名思义也就是把数据分成一块一块,每一块中包含若干个数据。但我们在分块的时候遵循分块的数量一般等于数据个数的开根号。例如我们有9个数据,我们一般就分为3块左右。

        分块查找的核心思路就是先确定要查找的元素在哪一块,然后在那个块里面挨个查找。

        我们所分的块也分两种情况,第一种情况就是我们前一块中的最大数据小于后一块中的所有数据,也就是块内无序,块间有序。我们只需要将每一块中的最大值存放到一个max的变量当中去,只需要将要查找的数据跟max相互比较,就能知道数据在哪个块里面了。如下所示:

根据最大值确定块,这里的前一块的最大值都小于后一块的最小值。

        如果当我们每一块的最大值不小于我们后一块的最小值的时候,也就是我们的第二种情况了。第二种情况每一块不能只设置一个max,需要给每一块再设置一个min,来确定块的范围,也就是min~max这个范围。如下所示:

        

通过比较,就能知道我们要查找的数据在哪个块的min~max之间,就直接到哪个块里面进行查找。

 

;