分块查找-数据结构

typedef struct
{
   int maxKey;/*“块”中最大的关键字*/
   int low,high;/*块的范围,块是等长的,也可只记录起始位置*/
}indexElem;/*块*/

inedexElem index[3];
int keys[15];

在这里插入图片描述
在查找某元素时,先对索引元素表中做折半查找,
当high<low时,折半查找结束,这时应该在low所指的块中进行“顺序查找”

/*折半的代码搬运过来,几乎完整搬运,参数都没改,只不过现在low,high所表达的意思分别是索引结构体矩阵的位置*/
int findBlock(int arr[ ] ,int low, int high, int key){
 while(low <= high )
  {  
  int mid =(low + high) /2;
   if (arr [mid] == key)
   return mid;
   else if (arr[mid] > key)
   high=mid-1;
   else
   loW=mid+1;
 }
 return 0;/********************* 折半查找return -1 ;*/
}



int Block_Search(int arr[],inedexElem index[],int key,int n,int b)/*在分块索引表中查找关键字为key的记录,表长为n,块数为b(block num)*/
{
  int i=0,j,k; 
  low=1;high=ST.length;
 int 块的起始位置=findBlock(arr,0, 2,9);
 /*在【】顺序查找*/
  for (int k = index[块的起始位置].low  ; k < index[块的起始位置].high; k++) {  
            if (key == st[k]) {  return k;  }
  }  

}


平均查找长度几乎是两部分查找长度的求和查找长度分析

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值