分块查找(索引顺序查找):
这是一种性能介于顺序查找和折半查找之间的一种查找方法,是顺序查找和折半查找两种算法的简单合成。
块内无序,块间有序
所谓 “分块有序” 指的是第二个子表中所有记录的关键字均大于第一个子表中的最大关键字,第三个子表中的所有关键字均大于第二个子表中的最大关键字。
算法适用情况:
由于块内是无序的,故插入和删除比较容易,无需进行大量移动。 如果线性表既要快速查找又经常动态变化,则可采用分块查找。
使用条件:线性表必须要能实现分块之间有序。
代码如下:
#include<stdio.h>
//索引表
typedef struct
{
int key; //最大关键字
int start; //块开始下标
int end; //块结束下标
}Node;
typedef struct
{
Node idx[10];//表项
int len; //表长
}IdxTable;
//分块查找
IdxTable table; //索引表
int BlockingSearch(int key,int a[])
{
//折半查找
int low, high, mid;
l