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; } } } 平均查找长度几乎是两部分查找长度的求和查找长度分析