#define MAX_SIZE 100
// 数据元素类型定义
typedef int KeyType;
typedef struct{
KeyType key; // 关键字域
// 其他域
} ElemType;
typedef struct {
ElemType R[MAX_SIZE]; // 存储空间基地址
int length; // 当前长度
} SSTable;
// 二分查找算法
int Search_Bin(SSTable ST, KeyType key) {
int low = 0; // 查找区间的下界
int high = ST.length - 1; // 查找区间的上界
while (low <= high) {
int mid = (low + high) / 2; // 区间的中间位置
if (ST.R[mid].key == key) {
return mid; // 查找成功,返回元素位置
} else if (ST.R[mid].key < key) {
low = mid + 1; // 缩小查找区间的下界
} else {
high = mid - 1; // 缩小查找区间的上界
}
}
return -1; // 查找失败,返回-1
}
根据题目中给出的有序表定义,我们使用顺序存储结构实现了SSTable,其中R是存储空间基地址,length是当前长度。Search_Bin函数接受SSTable以及待查找的关键字key作为参数,并返回找到的关键字在表中的位置(从0开始),如果未找到则返回-1。算法通过比较中间元素的关键字与待查找关键字的大小,逐步缩小查找范围,直到找到目标元素或区间为空。