检索算法
数据结构的排序算法,到17篇归并排序就彻底讲解完成。从今天开始,我们将进入全新的数据结构知识,它的名字叫查找算法,也叫检索算法。
检索算法又分为排序检索与非排序检索。排序检索顾名思义就是先排序在进行查找,在数据库的查找中,我们往往都是这么做的。当然非排序检索也存在,只不过效率非常低。
检索算法包括线性查找、二分查找、插值查找、斐波拉契查找、分块查找、哈希查找以及回溯查找7个算法。所以,从18到24篇都是检索算法的内容知识。
下面,我们来介绍今天第1个要讲解的查找算法:线性查找。
线性查找
线性查找,又名Linear Search,顾名思义就是一种顺序的查找方算法,也是所有查找算法中最简单的一个算法。
其具体的原理:从第1个元素开始依次查找比较,若查找成功,返回其元素的索引;若查找失败,则返回查询无果。
当然,线性查找即可以从数列左边开始,也可以从数列右边开始。同时,它的原始数据既可以是排序好的列表,也可以是非排序列表。
图解线性查找
还是与前面的排序算法一样,我们也将查找算法用图解的方式给大家一一展示出来,这样更方便初学者的理解与学习,具体原理图解图下:
如上图所示,我们在该列表中查询元素等于3的索引位置。这里,我们从左边i=0开始查找,如果查找成功,则返回对应的索引位置。
实战:线性查找
因为线性查找太过于简单,我们这里实现2中线性查找,一种是从左边开始查找,一种是从右边开始查找。具体示例如下:
# 从左线性查找 def lef_linear_search(my_list, num): n = len(my_list) i = 0 while i < n: if my_list[i] == num: return i i += 1 return "None" # 从右线性查找 def right_linear_search(my_list, num): n = len(my_list) i = n - 1 while i >= 0: if my_list[i] == num: return i i -= 1 return "None" if __name__ == "__main__": my_list = [8, 0, 4, 3, 2, 1] print("线性查找的原始数列:", my_list) print("从左边开始线性查找:", lef_linear_search(my_list, 3)) print("从右边开始线性查找:", lef_linear_search(my_list, 3))
运行之后,效果如下: