静态查找表
//顺序表查找的数据类型
#define MAXL 100
typedef int KeyType
typedef struct
{
KeyType key;
InfoType data;
}NodeType;
typedef NodeType SeqList[MAXL];
顺序查找:它是一种最简单的查找方法。基本思路是:从表的一段开始顺序扫描现行表,依次将扫描到的关键字和给定k相比较。
有序表查找之折半查找:折半查找是一种效率较高的查找方法。它要求线性表是有序的。它的时间复杂度是O(n log2n).
设R[low...high]是当前查找的区间,首先确定该区间的中点位置mid=(low+high)/2,然后待查找的k值与R[mid].key比较,若相等查找成功,若>将区间确定为R[mid...high]继续查找,若<将区间确定为R[low...mid]继续查找。
int Binsearch(SeqList R,int n,KeyType k)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(R[mid].key==k)return mid+1;
if(R[mid].key>k)high=mid-1;
else low=mid+1;
}
ruturn 0;
}
三分查找算法
int BinSearch(SeqList R,int n,KeyType k)
{
int low=0,high=n-1,mid,mid1;
while(low<=high)
{
mid=(high-low)/3+low;
mid1=(high-low)*2/3+low;
if(R[mid].key==k)
return mid+1;
if(R[mid].key>k)
high=mid-1;
else
{
low=mid+1;
if(R[mid1].key==k)
return mid1+1;
if(R[mid1].key>k)
high=mid1-1;
else
low=mid1+1;
}
}
return 0;
}
索引顺序表的查找
//索引表的数据类型如下
#define MAXI<索引表的最大长度>
typedef struct
{
KeyType key;
int link;
}IdxType;
typedef IdxType IDX[MAXI];
采用折半查找索引表的平均查找长度为:
ASLb=ASLbn+ASLs=log2(b+1)-1+(s+1)/2
静态树表的查找
动态查找表
二叉排序树
二叉平衡树
B-树和B+树
键树
哈希表