您的位置:首页 > 其它

查找——简单顺序查找

2013-03-03 22:28 225 查看

基本思想

从顺序表的一端开始扫描,将给定值K依次与顺序表中各数据元素的关键字进行比较,若当前扫描到的结点关键字与给定值K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。

实例分析

在顺序表:22,34,25,12,35,67,7,45中查找25的位置。

在数组元素的1~8位置中依次存放组成顺序表的数据元素,将给定值K作为新数据元素的数据项存放在0位置(称其为监视哨)。查找操作从顺序表的最后一个元素开始,依次将r[8]~r[1]的关键字依次与给定值K比较。最后输出位置i,若i>0时,表示查找成功,i=0时表示查找失败。

分析图如下:



代码实现

int SeqSearch(List L,int key)
{
L.r[0]=key;
int i=L.length;
while(L.r[i]!=key)--i;
return i;
}
注意,将r[0]置为key的好处是,防止下标越界,节省重新比较的时间。

性能分析

假设顺序表的长度为n,那么查找第i个元素时需要进行n+1-i次比较,即Ci=n+1-i。又假设查找每个数据元素的概率相等,则Pi=1/n,则顺序查找算法的平均查找长度为:



注:平均查找长度中Pi为查找顺序表中第i个元素的概率,Ci为找到关键字等于给定值K时已经进行比较过的次数。

由上可知,最大查找长度和平均长度与的算法时间复杂度均为O(n)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: