数据结构中的查找算法
顺序查找
顺序查找的时间复杂度以及优点
- 顺序查找是一种最简单的查找方法,优点是算法简单,且对表的结构无特别要求,无论是顺序表还是用链表来存放元素,也无论是元素之间是否按关键字有序,它都同样适用。
- 顺序查找的时间复杂度是O(n),其中n为查找表中的元素个数。
顺序查找的算法
顺序查找的算法如下:
int SeqSearch(RecType R[],int n,KeyType k)
{
int i=0;
while(i<n && R[n].key!=k)
i++;
if(i>=n)
return 0;
else
return i+1;
}
折半查找
折半查找的时间复杂度以及优点
- 折半查找,又称二分查找,它是一种效率较高的查找方法。
- 折半查找的时间复杂度为O(log2n);
折半查找的算法
折半查找的算法如下:
int BinSearch(RecType R[],int n,KeyType k)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(k==R[mid].key)
return mid+1;
if(k<R[mid].key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
分块查找
分块查找的算法
折半查找的算法如下:
int IdxSearch(IdxType I[],int b,RecTypr R[],int n,KeyType k) //分块查找
{
int s=(n+b-1)/b;
int low=0,high=b-1,mid,i;
while(low<=high) //在索引表中进行折半查找,找到的位置为high+1
{
mid=(low+high)/2;
if(I[mid].key>=k)
high=mid-1;
else
low=mid+1;
}
i=I[high+1].link;
while(i<=I[high+1].link+s-1 && R[i].key!=k)
i++:
if(i<=I[high+1].link+s-1)
return i+1;
else
return 0; //查找失败,返回0
}