目录
基本概念
研究重点:
怎么存,怎么加约束关系,怎么提高查找效率
线性表
顺序查找(线性查找)
Squential Search Table 顺序查找表
代码实现
静态 无序
typedef struct{
int key;
int information;
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
int Search_Seq(SSTable ST , int key){
ST.R[0].key = key;
int i = ST.length;
for(; ST.R[i].key != key ; i--);
return i;
}
复杂度分析
折半查找(二分or对分查找)
代码实现
非递归
typedef struct{
int key;
int information;
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
int Search_Bin(SSTable ST , int key){
int low = 1 , high = ST.length;
while(low <= high){
int mid = (low + high) / 2;
if(ST.R[mid].key == key){
return mid;
}else if(key < ST.R[mid].key){
high = mid - 1;
}else{
low = mid + 1;
}
}
return 0;
}
递归
typedef struct{
int key;
int information;
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
int Search_Bin(SSTable ST , int key , int low , int high){
if(low > high) return 0;
int mid = (low + high) / 2;
if(key == ST.R[mid].key){
return mid;
}else if(key < ST.R[mid].key){
Search_Bin(ST , key , low , mid - 1);
}else{
Search_Bin(ST , key , mid + 1 , high);
}
}
复杂度分析
第一层 一个结点 1*1
第二层 两个结点 2*2
第三层 四个结点 3*4
……[层数(比较次数)* 这层结点数(个数)]
加起来
除以
总结点数