单元五 · 把数据排列有序
第17课 选择排序轻松做

一、学习目标
- 能够梳理出选择排序的基本步骤,通过补全流程图,了解用流程图描述的选择排序算法。
- 了解排序数据量与算法执行次数的关系,能够用程序验证选择排序算法。
二、情境导入
日常生活中,排序是很常见的事情,例如,把一堆水果按大小排序,把玩具球按直径大小排序,一队小朋友按身高排序,一个旅游团按年龄排序,一些动物按它们的奔跑速度排序……
想一想:你还知道哪些场景需要排序呢?
三、核心讲解
本课学习路径:
1.描述选择排序的算法
桌上有 5 个盒子,分别以 1、2、3、4、5 编号,每个盒子里装有一张卡片,卡片上写着一个大于 0 的数。请依据这些卡片上的数,把它们从大到小排序。要求:写着最大数的卡片放在 1 号盒子,写着第二大数的卡片放在 2 号盒子,以此类推。
基本步骤:
- 用前一课所学方法,找出最大数的卡片所在盒子。
- 把写着最大数的卡片与 1 号盒子里的卡片进行交换。
- 在 2 号到 5 号盒子里,继续用「找出最大数」的方法,找到后与对应盒子里的卡片交换。
以上操作形成了具有循环结构的算法:
- 把卡片放入盒子,已排序个数设为 0。
- 在未排序数中找到最大数,与未排序的第一个数交换位置。
- 重复第 2 步,依次查看所有数并交换到相应位置。
- 按顺序呈现 5 个数。
流程图:选择排序(搜索—交换—缩小范围)
2.分析选择排序的过程
5 张卡片上有 5 个数,如 108、24、12、91、35。运用选择排序算法,完成五个数从小到大的排序,验证算法执行的步骤,记录卡片交换的次数。
想一想:有同学说「我观察一下就能把这 5 个数排好顺序,不必反复操作,计算机有点笨呀!」你认同这个说法吗?
3.验证选择排序的算法
请在下方动手体验中载入并运行「选择排序」程序,观察每一轮交换后的数组变化;找到其中的循环结构。尝试修改参与排序的数据个数,再次运行,观察输出结果的变化。
本课无新基础语法;选择排序见流程图。for / if / 列表已在前面课讲过。
弄清以上要点后,再进入下方 Python Online,观察选择排序每一轮的结果。
四、动手体验 · Python 3 Online 编程
本课含 2 个程序,请在下拉中切换后分别「载入」运行。
正在载入 Python 3 Online
正在载入编程环境…
五、课堂总结
- 选择排序是计算机完成排序任务时常用的一种排序算法。
- 选择排序算法借助在特定范围内,寻找最大数或最小数并交换位置的方式进行排序。
- 通过探究选择排序与找出最大值或最小值之间的关系,可以了解算法的内在联系。
六、拓展提升
- 在 Python 中,可以使用 sorted() 函数来进行排序。可在下方动手体验中分别运行「选择排序」与「用sorted排序」,体会同一问题可用不同程序实现。
测评
选出后点「检查」。答错会显示简短说明。
选择排序的基本思想是?
选择排序与哪一课所学内容关系最密切?
对于大量数据排序,计算机相比人工的主要优势是?
本节小结
选择排序Repeatedly在未排序区找最值并交换;与找最大数算法一脉相承。数据量大时,程序自动执行的优势更明显。