分块查找

来源:互联网 发布:无线耳机推荐 知乎 编辑:程序博客网 时间:2024/05/17 14:27
 

分块查找(Blocking Search)又称索引顺序查找,是前面两种查找方法的综合。

1  查找表的组织

① 将查找表分成几块。块间有序,即第i+1块的所有记录关键字均大于(或小于)第i块记录关键字;块内无序;

② 在查找表的基础上附加一个索引表,索引表是按关键字有序的,索引表中记录的构成是:最大关键字+起始指针;

2  查找思想

先确定待查记录所在块,再在块内查找(顺序查找)。

3  算法实现

typedef struct IndexType

{

         keyType  maxkey ;     /*  块中最大的关键字  */

         int startpos ;     /*  块的起始位置指针  */

}Index;

 

int Block_search(RecType ST[] , Index ind[] , KeyType key , int n , int b)

      /*  在分块索引表中查找关键字为key的记录 */  

      /*表长为n ,块数为b */

{  

         int i=0 , j , k ;

         while ((i<b)&&LT(ind[i].maxkey, key) )  i++  ;

         if (i>b)

         { 

                   printf("\nNot found");  

                   return(0); 

         }

         j=ind[i].startpos ;

         while ((j<n)&&LQ(ST[j].key, ind[i].maxkey) )

         {  

                   if ( EQ(ST[j].key, key) )  break ;

                   j++ ;

         }     /*  在块内查找  */

         if (j>n||!EQ(ST[j].key, key) )

         { 

                   j=0;

                   printf("\nNot found"); 

         }

         return(j);

}

 

4  算法分析

      设表长为n个记录,均分为b块,每块记录数为s,则b=⌈n/s⌉。设记录的查找概率相等,每块的查找概率为1/b,块中记录的查找概率为1/s,则平均查找长度ASL:

原创粉丝点击