Python中排序算法之选择排序

选择排序算法是对《Python中排序算法之冒泡排序》中提到的冒泡排序算法的改进。

1 选择排序原理

选择排序是在参加排序的所有元素中找到数值最小(或最大)的元素,如果它不是左侧第一个元素,就使它与左侧第一个元素中的数据相互交换位置;然后在余下的元素中找出数值最小(或最大)的元素,如果它不是左侧第二个元素,就与左侧第二个元素的数据交换位置,以此类推,直到所有元素成为一个有序的序列。

2 选择排序的手动实现

假设数列中有"8、5、9、3、6"这5个数,使用选择排序算法对该数列进行升序(从小到大)排列,如图1所示。

图1 原始数列

首先,找出"8、5、9、3、6"这5个数中的最小数"3",之后将"3"放在数列的最左端,如图2所示。

图2 第一次排序

注意1 "1 选择排序原理"中提到的是数列中最小数与数列左侧第一个数交换位置,得到两个子数列,如图2中红框和绿框中的数列。我们想得到的最终升序数列是红框中的子序列,绿框中子数列中数字的排列顺序对不影响最后的结果,也就是说,绿框中的数列顺序是"8、5、9、6"还是"5、9、8、6",不影响最终的排序。

接下来在绿框中的数列中找出其最小值"5",然后把"5"放到红框数列的尾部,如图3所示。

图3 第二次排序

之后继续在绿框的数列中查找最小值,放到红框数列的尾部,最终红框数列即为得到的升序数列,如图4所示。

图4 接下来的排序

注意2 使用选择排序算法对n个数字进行排序时,需要排n-1次。

注意3 选择排序的排序次数与冒泡排序相同,但是交换数字位置的次数要比冒泡排序少,因此它具有更高的效率。

3 选择排序的编码实现

通过图5所示的代码实现选择排序。

图5 选择排序的代码实现

其中,第1行为原始的数列;第2行的for循环为排序的次数;第3行中的变量k表示绿框序列中最小值的下标,将其初始值设置为i,即绿框中左侧第一个数的下标;第4-6行通过for循环找到绿框数列中的最小值,并将其下标保存到变量k中;如果最小值就是绿框中左侧第一个数,则此时无需交换数字的位置,如果最小值不是绿框中左侧第一个数,如第7行代码所示,则交换两个数的位置,如代码第8行所示。程序运行的结果如图6所示。

图6 程序运行的结果

相关链接1 通过选择排序算法实现降序(从大到小)的代码,只需将图5第5行中的">"换成"<"即可。

相关推荐
闻道且行之6 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午7 小时前
95_Python内存管理与垃圾回收
开发语言·python
骄阳如火8 小时前
Python 性能深度剖析:从“被诟病的慢”到“Rust 重塑”的拐点
python
满怀冰雪8 小时前
03-第一个 Paddle 程序:Tensor 创建、计算与设备管理
人工智能·python·paddle
QXWZ_IA9 小时前
1库1图1批是什么?千寻位置公安地图数据体系详解
科技·算法·能源·媒体·交通物流·政务
CClaris9 小时前
大模型量化从0到1(九):用 llama.cpp 把模型转成 GGUF 并跑本地推理
人工智能·pytorch·python·深度学习·llama
学编程的小虎9 小时前
SenseVoice微调
人工智能·python·自然语言处理
c238569 小时前
Bug 猎手入门指南
c++·算法·bug
诸葛说抛光9 小时前
国内大型汽车改装展览会定展 佛山改装 佛山汽车赛事
python·汽车