算法复习-查找(3)-分块查找法

分块查找:

分块查找又称为索引顺序查找,其数据结构可以简单地描述为:分块查找把线性表分成若干块,每一块中的元素存储顺序是任意的,但是块与块之间必须按照关键字大小有序排列,即前一块中的最大关键字要小于后一块的最小关键字。
对顺序表进行分块查找需要额外建立一个索引表,表中的每一项对应线性表中的一块.

//索引表定义
typedef struct {
  int key;  //对应块的最大关键字
  int low, high; //指向本块的第一个元素和最后一个元素.
}

显然索引表的所有索引项都是按照其关键字递增排序的。

算法描述:

分块查找分为两步进行:首先确定待查找的元素属于哪一块,然后在块内精准查找该元素。
由于索引表是递增有序的,因此第一步采用二分查找。块内元素一般个数较少,因此第二步采用顺序查找即可。

ASL分析:

分块查找实际上进行两次查找,整个算法的ASL是两次查找的ASL之和,即二分查找ASL+顺序查找ASL

你可能感兴趣的:(算法复习-查找(3)-分块查找法)