分块查找

 

分块查找(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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值