目录
一、顺序查找
*查找效率分析
二、折半查找
*查找效率分析
三、分块查找
*查找效率分析
一、顺序查找
有称线性查找,
算法思想:从头到尾挨个查找(反过来也行)
typedef struct{
int *elem; //数据
int TableLen; //长度
}SSTable;
int Search_Seq(SSTable ST,int key){
int i;
for(i=0;i<ST.TableLen && ST.elem[i]!=key; ++i); //从前往后找
return i==St.TableLen ? -1 : i ; //成功返回i,不成功 -1
}
*查找效率分析
查找成功:
n个数据,每个数据查找成功概率为,第一()给数据对比1次为,第二()个对比2次为,依次类推,第n()位,累加为
查找失败: n+1
对有序表
一个成功结点查找长度=自身所在层数
一个失败结点查找长度=其父结点所在层数
二、折半查找
折半查找只适用有序的顺序表
typedef struct{
int *elem; //数据
int TableLen; //长度
}SSTable;
int Binary_Search(SSTable L,int key){
int low=0,high=L.TableLen-1,mid;
while(low<=high){
mid=(low+high)/2; //取中间位置
if(L[mid]==key)
return mid; //成功查找位置
else if(L[mid]<key)
high=mid-1; //前部分继续查找
else
low=low+1; //后部分继续查找
}
return -1;
}
*查找效率分析
查找成功:
成功=(第几层*每层成功结点树)累和/总成功结点数
查找失败:
失败=(失败的层*每层数量)累和/总失败结点数
判定树的构造
右子树结点数-左子树结点树=0或1,且只有最后一层不满,高度就是二叉树树高
失败结点数量为 n+1
三、分块查找
①:在索引表中确定待查记录所属的分块(可顺序,可折半)
②:在块间顺序查找
*查找效率分析
查找成功:
共14个元素;每个被查概率为,
若索引表采用顺序查找,则查7:2次、10:3次、13:3次... ,当
若索引表采用折半查找,则查30:4次、27:3次... n块,s个元素