一、顺序查找法
算法思想:
依次与每个关键字逐个比较,如果与给定值相等,则查找成功,返回成功值;如果与所有关键字都不相等,则查找失败,返回失败值。其平均查找长度是
实现:
int Search(int R[],int n,int k) // 在长度为n的R[]中查找数值为k的元素
{
int i;
for(i=0;i<n;i++)
{
if(a[i]==k)
return i; // 查找成功返回i
}
return -1; // 查找失败返回-1
}
二、折半查找法
前提:
折半查找又称二分查找,它要求线性表是有序的。
算法思想:
与处于查找表中间位置关键字比较,如果等于给定值,则查找成功,返回成功值;如果大于给定值,在表的左部折半法查找;如果小于给定值,在表的右部折半法查找;仅当左部或右部为空时候,查找失败,返回失败值。其平均查找长度是
算法分析:
实现:
int Bsearch(int R[],int k,int low,int high) //在R数组的low到high中查找关键字k
{
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(R[mid]==k)
return mid;
else if(k<R[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}
分块查找法
算法思想:
利用关键字序列的分段(块)有序性,建立分段(块)索引表。借助分段索引表,实现快速查找。这种方法称为索引顺序表法。前一块中的最大关键字小于后一块中的最小关键字
,而块内的关键字不一定有序。其算法过程为
- 在分段索引表中“顺序”或“折半”查找给定值所在的块;
- 在(1)确定的块中,顺序查找给定值。
若使用“顺序”查找块,则其平均查找长度是
若使用“折半”查找块,则其平均查找长度是
算法分析: