我是靠谱客的博主 精明老鼠,最近开发中收集的这篇文章主要介绍数据结构与算法——10. 顺序查找顺序查找,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 顺序查找
    • 1. 无序表的顺序查找
      • python代码实现
      • 算法分析
    • 2. 有序表的顺序查找
      • python代码实现
      • 算法分析

顺序查找

如果数据项保存在如列表这样的集合中,我们会称这些数据项具有线性或者顺序关系
在Python List中,这些数据项的存储位置称为下标(index),这些下标都是有序的整数,从零开始,到n-1结束(n为数据项的数量)。
通过下标,我们就可以按照顺序来访问和查找数据项,这种技术称为“顺序查找”。

1. 无序表的顺序查找

对于无序表的查找,首先从列表的第1个数据项开始,按照下标增长的顺序,逐个比对数据项,如果到最后一个都未发现要查找的项,那么查找失败。

python代码实现

def sequential_search(a_list, item):
"""
无序表的顺序查找
:param a_list: 被查找列表
:param item: 目标元素
:returns: 元素是否在列表中被找到
"""
# 从列表中一个个取出元素进行比较
for i in a_list:
# 找到值相同的元素,说明查找成功
if i == item:
return True
# 所有元素都取完还未找到,说明查找失败
return False

算法分析

在查找算法中,基本计算步骤就是进行数据项的比对,对比的次数决定了算法复杂度。

无序表中的数据项并没有按值排列顺序,而是随机放置在列表中的
各个位置。换句话说,数据项在列表中各处出现的概率是相同的

  • 最好的情况下,目标元素被放在列表的第一个位置,第1次比对就找到。
  • 最坏的情况下,目标元素被放在列表末尾或者根本不在列表中,那就需要n次比对。
  • 因为数据项在列表中各个位置出现的概率是相同的。所以平均状况下,比对的次数是n/2。
情况最好情况最坏情况平均情况
元素存在1nn/2
元素不存咋在1nn/2

所以,顺序查找的算法复杂度是 O ( n ) O(n) O(n)

2. 有序表的顺序查找

当数据项存在时,比对过程与无序表完全相同不同之处在于,如果数据项不存在,比对可以提前结束。

比如,列表从小到大排列,我们要查找31,当我们查找到32(或者更大的数字)的时候还没有找到,那么就没有必要再去后面查找了。

python代码实现

我们以从小到大排序的列表为例。

def ordered_sequential_search(a_list, item):
"""
有序表的顺序查找
:param a_list: 被查找列表
:param item: 目标元素
:returns: 元素是否在列表中被找到
"""
for i in a_list:
# 对比当前元素是否已经大于目标元素,如果是则提前返回
if i > item:
return False
if i == item:
return True
return False

算法分析

无序表的顺序查找和有序表的顺序查找基本相同。只是在数据项不存在的时候,有序表的查找能节省一些比对次数,但并不改变其数量级。

情况最好情况最坏情况平均情况
元素存在1nn/2
元素不存在1nn/2

所以算法复杂度仍然是 O ( n ) O(n) O(n)

最后

以上就是精明老鼠为你收集整理的数据结构与算法——10. 顺序查找顺序查找的全部内容,希望文章能够帮你解决数据结构与算法——10. 顺序查找顺序查找所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部