『算法』——静态查找——线性表查找——线性查找(顺序查找)

引言

  • 线性查找是顺序表或线性链表表示的静态查找表
  • 表内元素无序
  • 线性查找又称为顺序查找

1、思想

\quad \quad 从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。

在这里插入图片描述

2、算法

2.1 线性查找

【伪代码】——迭代法

在这里插入图片描述

def linear_search(A,x):
    n=len(A)
    answer = "NOT FOUND"
    for i in range(n):
        if A[i]==x:
            answer=i
    return answer

【伪代码】——递归法

在这里插入图片描述

def Recursive_linear_search(A,i,x):# i:0
    n=len(A)
    if i>n:
        return "NOT-FOUND"
    else :
        if A[i]==x:
            return i
        else:
            return  Recursive_linear_search(A,i+1,x)   

较好的线性查找

(找到值就不再遍历,跳出循环)
【伪代码】
在这里插入图片描述

def better_linear_search(A,x):
    n=len(A)
    for i in range(n):
        if A[i]==x:
            return i
    return print("NOT FOUND")
    

2.2 哨兵线性查找

\quad \quad 在上述线性查找中,每次循环都要比较两次:所在位置索引是否超过列表长度以及该值是否等于目标值。是否能改进?

改进:
\quad \quad
把待查关键字Key存入表尾(称为“哨兵”、“监视哨”),从前往后逐个比较,可免去查找过程中每一步都要检测是否查找完毕,加快速度。

【伪代码】
在这里插入图片描述

def sentinel_linear_search(A,x):
    n=len(A)
    last=A[n-1]#b保存数组最后一个元素
    A[n-1]=x#用x替换数组最后一个元素
    i=0
    while A[i]!=x:
        i+=1
    A[n-1]=last#还原数组最后一个元素
    if i<n-1 or A[n-1]==x:
        return i 
    else:
        print("NOT FOUND")

3、查找性能(ASL)

\quad \quad 假设列表长度为n,比较次数与关键字位置有关

1、若查找成功

\quad \quad 查找到表中第i个记录R[i-1]时,需比较i次,设表中记录查找概率相等,利用公式得平均查找长度:

在这里插入图片描述
2.若查找失败

\quad \quad 每个元素都需要进行比较,故直接:

ASL=n

3、时间复杂度:

\quad \quad 成功与失败的时间复杂度都为 O ( n ) O(n) O(n)

4、空间复杂度:
\quad \quad 一个辅助空间哨兵—— O ( 1 ) O(1) O(1)

4、特点

【优缺点】
(1)优点:①算法简单②适用性广泛(对表的结构无任何要求)
(2)缺点:查找效率低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值