typedef struct{
KeyType key; // 主键
InfoOther other; // 次键
}ElemType;
typedef struct{
ElemType* elem; // 基地址
int length; // 表长
}SSTable;
```
查找概率相等时,ASL相同;
查找概率不等时,如果从前向后查找,则按查找概率由大到小排列的有序表其ASL要比无序表ASL小
若k==Rmid.key,查找成功
若k<Rmid.key,则high=mid-1
若k>Rmid.key,则low=mid+1
直至low>high时,查找失败
/*-----------折半查找----------*/
// 非递归算法
// 适用于顺序存储
int Search_Bin(SSTable ST, KeyType key){
//若找到,则函数值为该元素在表中的位置,否则为0
int low = 1;
int high = ST.length;
while(low <= high){
int mid = (low + high) / 2;
if(key == ST.elem[mid].key) return mid;
else if(key < ST.elem[mid].key) high = mid - 1; //前一子表查找
else low = mid + 1; //后一子表查找
}
return 0; //表中不存在待查元素
}
/*-----------折半查找----------*/
// 递归算法
int Search_Bin(SSTable ST, KeyType key, int low, int high){
if(low > high) return 0;
int mid = (low + high) / 2;
if(key == ST.elem[mid].key) return mid;
else if(key < ST.elem[mid].key) Search_Bin(ST, key, low, mid-1);
else Search_Bin(ST, key, mid+1, high);
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。