- Python算法设计与分析从入门到精通
- 明日科技编著
- 741字
- 2025-02-20 00:12:03
4.1 选择排序算法
选择排序法就是反复从未排序的数列中取出最小(或最大)的值,加入另一个数列中,最后的结果即为已排序好的数列。选择排序法包括两类,即递增排序和递减排序。
递增排序:在未排序数列中取最小值,与数列第一个位置交换;然后再从未排序的数列中取最小值,与数列的第二个位置交换;如此重复,直到数列中的所有数据均已按照从小到大的顺序完成排序。
递减排序:在未排序数列中取最大值,与数列中第一个位置交换;然后再从未排序的数列中取最大值,与数列的第二个位置交换;如此重复,直到数列中的所有数据均已按照从小到大的顺序完成排序。
例如,有这样一组数据:56, 18, 49, 84, 72,如图4.1所示。采用选择排序算法对其递增排序,步骤如下。
(1)找到数列中的最小值18,与数列中的第一个元素56交换,如图4.2所示。

图4.1 原始值

图4.2 第一次排序结果
(2)从第二个值开始,找到余下数列(56, 49, 84, 72)中的最小值49,和第二个值56交换,如图4.3所示。
(3)从第3个值开始,找到余下数列(56, 84, 72)中的最小值56,和第3个值交换。由于56本来就在第三个位置,因此位置不变,如图4.4所示。

图4.3 第二次排序结果

图4.4 第三次排序结果
(4)从第4个值开始,找到余下数列(72, 84)中的最小值72,和第4个值84交换,如图4.5所示。
(5)5个数全部排完,最终排序结果如图4.6所示。

图4.5 第四次排序结果

图4.6 最终排序结果
接下来用Python代码实现上述选择排序过程。
【实例4.1】 使用选择排序法将列表中的数字递增排序。(实例位置:资源包\Code\04\01)
具体代码如下:

运行结果如图4.7所示,排序的步骤和前面的分析完全吻合。
【实例4.2】 京东商场24小时图书销量排行榜。(实例位置:资源包\Code\04\02)
根据京东商城计算机类图书的24小时销量数据,采用选择排序法生成图书销量排行榜。具体代码如下:

运行结果如图4.8所示。

图4.7 选择排序法

图4.8 运行结果