查找——简单顺序查找

基本思想

从顺序表的一端开始扫描,将给定值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)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值