【21天学习经典算法】列表的分类与顺序查找(附Python完整代码)

本文详细介绍了顺序查找算法,包括其在无序和有序列表中的应用。博主通过实例展示了Python代码实现,解释了算法的时空复杂度,并提供了简易版和函数版的代码示例。同时,文中提到了顺序查找的局限性,即在存在重复元素时只能找到第一个匹配项。
摘要由CSDN通过智能技术生成

前言

博主一头小山猪目前已开放文章一文学懂经典算法系列之:顺序查找(附讲解视频)
该博文主要介绍了算法的定义顺序查找的时空复杂度定义,最后是算法实现

活动地址:CSDN21天学习挑战赛

正文

列表的分类与顺序查找定义

列表的分类:
无序列表无序列表内的数据没有可比性质,其排列没有逻辑可寻,列表内的数据项的大小与位置无关
例如:

a = [1, 4, 6, 32, 34, 7, 45, 9, 17]
print(a)

有序列表有序表是一种数据项依照其某可比性质(如整数大小、字母表先后)来决定在列表中的位置。越“小”的数据项越靠近列表的头,也就是越靠“前”,因此列表内的数据项的大小与位置强相关
例如:

b = [1, 4, 6, 7, 9, 17, 32, 34, 45]
print(b)

注意到,ab列表内的数据都相同,只不过列表内数据的排列顺序不同,这便是有序列表与无序列表的区别

顺序查找: 也称为线性查找,其实现的逻辑是,在一个长度为L的列表或数组A中找数据为x的数字。查找的结果有两种情况,第一种为数字x存在于数组A中,第二种则为数字x不存在于数组A中。
若是第一种情况,则返回该数字在数组中的位置。
若是第二种情况,则返回用户自定义的数字,如返回数字-1

小结: 对于顺序查找的算法,查找的列表的数据内容既可以是没有按照顺序排列的。也可以是按大小的逻辑按顺序排列的,以下将进行对于无序与有序列表顺序查找的代码实现。

Python代码实现顺序查找

代码实现了两种情况,第一种是找到了该数字,并输出该数字在数组中的位置,第二种是在列表中没有找到自己的目标数字,输出该数字在数组中不存在。
若不需要知道数字在数组中的位置,只需要知道数组是否存在目标数字,则将代码块print("所查找的数字在数组中的第", i + 1, "位")改为print("所查找的数字存在该数组中")

对于无序列表的代码实现

简易版

# Sequential_search1.py
a = [1, 4, 6, 32, 34, 7, 45, 9, 17, 22]
T = 22
# a为数组,T为目标数字
for i in range(len(a)):
    if a[i] == T:
        print("所查找的数字在数组中的第", i + 1, "位")
        break  # 当找到这个数字后直接跳出程序,不再执行。
        # 缺点在于,若数组中含有两个大小相同而位置不同的目标数字,就只能找到排在前面的数字。
    if a[i] != T and i == len(a) - 1:
        print("所查找的数字在数组中不存在")

函数版

# Sequential_search1.py
def Sequential_search1(array, target):  # array为数组,target为目标数字
    for i in range(len(array)):
        if a[i] == target:
            print("所查找的数字在数组中的第", i + 1, "位")
            break  # 当找到这个数字后直接跳出程序,不再执行。
            # 缺点在于,若数组中含有两个大小相同而位置不同的目标数字,就只能找到排在前面的数字。
        if a[i] != target and i == len(array) - 1:
            print("所查找的数字在数组中不存在")
            break


a = [1, 4, 6, 32, 34, 7, 45, 9, 17, 22]
Sequential_search1(a, 23)

对于有序列表的代码实现

对于有序列表的顺序查找的代码实现,与无序之间的区别就在于,在开始查找之前,就对需要查找的列表按照数字大小的逻辑进行排序。

简易版

# Sequential_search1.py
a = [1, 4, 6, 32, 34, 7, 45, 9, 17, 22]
T = 9
b = sorted(a)
print(b)
# a为数组,T为目标数字
for i in range(len(b)):
    if b[i] == T:
        print("所查找的数字在数组中的第", i + 1, "位")
        break  # 当找到这个数字后直接跳出程序,不再执行。
        # 缺点在于,若数组中含有两个大小相同而位置不同的目标数字,就只能找到排在前面的数字。
    if b[i] != T and i == len(b) - 1:
        print("所查找的数字在数组中不存在")

函数版注意事项函数版内的第二个if判断的是,如果查找到的数字比目标数字小了,那么再往后也不会找到目标数字,因此程序可以直接判定目标数字在数组内不存在。

def Sequential_search1(array, target):  # array为数组,target为目标数字
    for i in range(len(array)):
        if b[i] == target:
            print("所查找的数字在数组中的第", i + 1, "位")
            break  # 当找到这个数字后直接跳出程序,不再执行。
            # 缺点在于,若数组中含有两个大小相同而位置不同的目标数字,就只能找到排在前面的数字。
        if target > b[i]:
            print("所查找的数字在数组中不存在")
            break
        if b[i] != target and i == len(array) - 1:
            print("所查找的数字在数组中不存在")
            break


a = [1, 4, 6, 32, 34, 7, 45, 9, 17, 22]
b = sorted(a)
Sequential_search1(b, 23)

以上就是个人在顺序查找中的理解,如果错误之处,还望指正。

参考资料

  1. 一文学懂经典算法系列之:顺序查找(附讲解视频)
  2. 数据结构教程 第5版
  3. 数据结构与算法----顺序查找(Python版)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Albert_Lsk

今天又能喝柠檬茶啦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值