当前位置:主页 > 查看内容

Python 编程1000例(21):排序算法——选择排序法

发布时间:2021-07-09 00:00| 位朋友查看

简介:文章目录 一、选择排序 二、实例使用选择排序法进行递增排序 本系列文章通过 1000一篇文章表示 1 个实例 个实例 为读者提供较为详细的练习题目以便读者举一反三深度学习。本系列的文章涉及到 Python 知识点包括Python 语言基……

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

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

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

一、选择排序

选择排序法就是反复从未排序的数列中取出最小(或最大)的数据,将其存放在序列的起始位置,然后,再从未排序的元素中继续寻找最小(或最大)的数据,存放在已排序序列的末尾,以此类推。最后的结果即为已排序好的数列。选择排序法最后的结果有两种形式,即递增数列和递减数列,下面就对于两种结果形式的具体排序流程进行描述。

  1. 结果为递增排序:首先在未排序数列中取最小值,与数列第一个位置交换;然后再从未排序的数列中取最小值,与数列的第二个位置交换。如此重复,直到排序数列中的数据按照从小到大的顺序排序完成。
  2. 结果为递减排序:首先在未排序数列中取最大值,与数列第一个位置交换;然后再从未排序的数列中取最大值,与数列的第二个位置交换。如此重复,直到排序数列中的数据按照从大到小的顺序排序完成。

接下来用一组数据来详细讲解选择排序法。例如,有这样一组数据:56,18,49,84,72,如下图所示:
在这里插入图片描述
按照递增顺序进行排序,步骤如下:

步骤1:找到所示数列中的最小值18与此数列中的第一个元素56交换,如下图所示:
在这里插入图片描述
步骤2:从第二个值开始,找到此数列中(不包含第一个值)的最小值49,再和第二个值 56 交换,如下图所示:
在这里插入图片描述
步骤3:从第三个值开始,找到此数列中(不包含第一、第二个值)的最小值56,由于它本来就是在第三个位置,故不需要进行交换。
在这里插入图片描述
步骤4:从第四个值开始,找到此数列中(不包含第一、第二、第三个值)的最小值72,再和第四个值84交换,如下图所示:
在这里插入图片描述
步骤5:数列递增顺序排序完毕,结果如下图所示:
在这里插入图片描述

二、实例:使用选择排序法进行递增排序

使用选择排序法为列表:56,18,49,84,72,进行递增排序。具体代码如下:

def choose(data, data_len):  # 自定义一个选择排序法函数
    for m in range(data_len - 1):  # 遍历新数据
        for n in range(m + 1, data_len):
            if data[n] < data[m]:  # 如果数据小于原来的数据
                data[m], data[n] = data[n], data[m]  # 需要交换位置
        print('第 %d 次排序之后的结果是' % (m + 1), end='')  # 提示
        for n in range(data_len):  # 遍历每次排序的结果
            print('%3d' % data[n], end='')  # 输出结果
        print()  # 输出空行


num_list = [56, 18, 49, 84, 72]  # 创建数列并初始化
length = len(num_list)
print("原始数据为:")  # 提示
for i in range(length):  # 遍历原有数据
    print('%3d' % num_list[i], end='')  # 输出结果
print('\n---------------------------')  # 输出分界符
choose(num_list, length)  # 调用选择排序法函数
print('\n---------------------------')  # 输出分界符
print("排序之后的数据为:")  # 提示
for j in range(length):  # 遍历排序好的新数列的数据
    print('%3d' % num_list[j], end='')  # 输出结果
print('')  # 输出空行

程序运行结果如下图所示:
在这里插入图片描述
感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

????好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
????如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
?编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

;原文链接:https://blog.csdn.net/xw1680/article/details/115696280
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐