Python 编程1000例(14):查找算法——顺序查找算法

本系列文章通过 1000(一篇文章表示 1 个实例) 个实例 ,为读者提供较为详细的练习题目,以便读者举一反三,深度学习。本系列的文章涉及到 Python 知识点包括:Python 语言基础、运算符和表达式、语句和程序结构、列表和元组、字典和集合、字符串、正则表达式、函数、面向对象编程、模块和包、异常处理和程序调试、文件和目录操作、数据库编程、界面编程、网络编程、WEB 编程、进程和线程、网络爬虫、游戏编程等知识点,由易到难,由浅入深,一步步打下坚实的编程基础。

本系列文章涉及的算法包括搜索、回溯、递归、排序、迭代、贪心、分治和动态规划等,涉及的数据结构包括字符串、列表、指针、区间、队列、矩阵、堆栈、链表、哈希表、线段树、二叉树、二叉搜索树和图结构等。

本系列文章是笔者为适应当前教育改革的创新要求,更好地践行语言类课程,满足实践教学与创新能力培养的需要,阅读大量书籍、各大互联网公司的面试算法、LintCode、LeetCode、九章算法和结合笔者近几年项目经验编写的系列文章,精选了 1000 个趣味性、实用性强的应用实例,从不同难度、不同算法、不同类型和不同数据结构等方面,将实际算法进行总结,希望为 Python 编程人员抛砖引玉。由于笔者经验与水平有限,博文中疏漏及不妥之处在所难免,衷心地希望各位读者在评论区多提宝贵意见及具体的修改建议,以便笔者进一步修改和完善。

一、顺序查找算法

顺序查找又称为线性查找,是最简单的查找算法。这种算法就是按照数据的顺序一项一项逐个查找,所以不管数据顺序如何,都得从头到尾地遍历一次。顺序查找的优点就是数据在查找前,不需要对其进行任何处理(包括排序)。缺点是查找速度慢,如果数据列的第一个数据就是想要查找的数据,则该算法查找速度为最快,只需查找一次即可;如果查找的数据是数据列的最后一个(第几个),则该算法查找速度为最慢,需要查找 n 次,甚至还会出现未找到数据的情况。

例如,有这样一组数据:10、27、13、14、19、85、70、29、69、27。如果想要查找数据 19,需要进行 5 次查找;如果想要查找数据 27,需要进行 10 次查找;如果想要查找数据 10,只需要进行 1 次查找。

从这个例子中可以看出,当查找的数据较多时,用顺序查找就不太合适,所以说顺序查找只能应用于查找数据较少的数据列。这个过程好比我们在抽屉里找笔,如下图所示。通常情况下我们会从上层的抽屉开始,一层一层地查找,直到找到笔为止,这个例子就是生活中典型的顺序查找算法。
在这里插入图片描述

二、实例:查找随机生成数

例如,随机从 1~100 之间生成 50 个整数,并将随机生成的这 50 个数显示出来,然后用顺序查找算法查找16、45、97这几个数据的位置。具体代码如下:

import random  # 导入随机数模块

num = 0  # 定义变量num
# 使用列表推导式生成包含50个元素的列表
data = [random.randint(1, 100) for i in range(50)]
print("随机产生的数据内容是:")
for i in range(10):  # 遍历行
    for j in range(5):  # 遍历列
        # 按格式输出随机生成内容
        print('%2d[%3d] ' % (i * 5 + j + 1, data[i * 5 + j]), end='')
    print('')
while num != -1:  # 循环输入
    find = 0  # 比较次数
    num = int(input("请输入想要查找的数据,输入-1退出程序:"))  # 数据输入
    for i in range(50):  # 循环遍历50个随机数
        if data[i] == num:  # 判断输入数据和data数据是否相等
            print("在", i + 1, "个位置找到数据", data[i])  # 输出找到的位置和数据内容
            find += 1  # 比较次数加1
    if find == 0 and num != -1:  # 判断比较次数是否为0且输入数据是否为-1
        print("没有找到", num, "此数据")  # 提示没有找到数据

程序运行结果如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xw1680/article/details/115346495