分块查找,又称索引顺序查找,性能介于顺序查找和折半查找之间。
需建立一个 索引表 。
索引表包括两项内容: 关键字项(其值为该子表内的最大关键字)和指针项(指示该子表的第一个记录在表中的位置)。
索引表按关键字有序,则表或者有序或者分块有序。
“分块有序”指第二个子表中所有记录的关键字均大于第一个子表中的最大关键字,第三个子表中的所有记录的关键字均大于第二个子表中的最大关键字,......,依次类推。
因此,分块查找分两步:
1) 确定待查记录所在块(将key与索引表中值比较,可用顺序查找,也可用折半查找)
2) 在块中顺序查找
算法分析:
优点:在表中插入、删除元素时,只要找到该元素对应块即可,由于块内是无序的,故不需要大量移动,插入、删除较容易(相比于折半查找的有序)。
如果线性表既要快速查找又经常动态变化,可采用分块查找。 (?在该块插入后,块后面的块内容需要移动吧?)
缺点:增加索引表存储空间,并对初始索引表进行排序运算。