列表的分类与顺序查找
- 前言
- 正文
- 列表的分类与顺序查找定义
- Python代码实现顺序查找
- 对于无序列表的代码实现
- 对于有序列表的代码实现
- 参考资料
正文
列表的分类与顺序查找定义
列表的分类:无序列表
无序列表内的数据没有可比性质,其排列没有逻辑可寻,列表内的数据项的大小与位置无关
例如:
a = [1, 4, 6, 32, 34, 7, 45, 9, 17]
print(a)
有序列表
有序表是一种数据项依照其某可比性质(如整数大小、字母表先后)来决定在列表中的位置。越“小”的数据项越靠近列表的头,也就是越靠“前”,因此列表内的数据项的大小与位置强相关
例如:
b = [1, 4, 6, 7, 9, 17, 32, 34, 45]
print(b)
注意到,a与b列表内的数据都相同,只不过列表内数据的排列顺序不同,这便是有序列表与无序列表的区别。
顺序查找: 也称为线性查找,其实现的逻辑是,在一个长度为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)
以上就是个人在顺序查找中的理解,如果错误之处,还望指正。
参考资料
- 一文学懂经典算法系列之:顺序查找(附讲解视频)
- 数据结构教程 第5版
- 数据结构与算法----顺序查找(Python版)