分块查找主要用于线性表局部内元素所在范围是一个有序的结构,将线性表分成多块,且每一块所在的最大范围能够组成一个排序结构表。再使用另外一个线性表进行辅助,记录每一块的数据范围。
算法思路:
1、含有局部排序的线性表L,辅助线性表H
2、将线性表L划分为多个排序的分块,由H记录每一块的范围及所在位置
代码参考:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
// 设置最大长度
#define MaxSize 10
// 构建线性表(静态顺序表)
typedef struct List {
// 数据表
int data[MaxSize];
// 存储数据长度
int len;
}List;
// 构建辅助线性表(静态顺序表)
typedef struct ListH {
// 记录开始和结束位置
int start, end;
}ListH;
// 实例化线性表
void InitList(List* L) {
int i = 0;
while (i < MaxSize) {
L->data[i] = 0;
}
L->len = 0;
}
// 通过辅助表获取位置
ListH getMid(int num) {
ListH LH;
// 模拟辅助表返回数据
LH.start = 10;
LH.end = 12;
return LH;
}
// 分块查找
int getList(List* L, int num) {
// 获取辅助表内容
ListH mid = getMid(num);
// 在线性表查找
while (mid.start <= mid.end) {
if (mid.start == num) { return mid.start; }
mid.start++;
}
return -1;
}
int main() {
return 0;
}
代码仅供参考,思维逻辑为主。