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

前言

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

活动地址: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版)

猜你喜欢

转载自blog.csdn.net/AlbertDS/article/details/126104851