单元五 · 把数据排列有序

第17课 选择排序轻松做

任务场景
任务场景:选择排序轻松做

一、学习目标

  • 能够梳理出选择排序的基本步骤,通过补全流程图,了解用流程图描述的选择排序算法。
  • 了解排序数据量与算法执行次数的关系,能够用程序验证选择排序算法。

二、情境导入

日常生活中,排序是很常见的事情,例如,把一堆水果按大小排序,把玩具球按直径大小排序,一队小朋友按身高排序,一个旅游团按年龄排序,一些动物按它们的奔跑速度排序……

想一想:你还知道哪些场景需要排序呢?

三、核心讲解

本课学习路径:

1描述选择排序的算法
2分析选择排序的过程
3验证选择排序的算法

1.描述选择排序的算法

桌上有 5 个盒子,分别以 1、2、3、4、5 编号,每个盒子里装有一张卡片,卡片上写着一个大于 0 的数。请依据这些卡片上的数,把它们从大到小排序。要求:写着最大数的卡片放在 1 号盒子,写着第二大数的卡片放在 2 号盒子,以此类推。

基本步骤:

  1. 用前一课所学方法,找出最大数的卡片所在盒子。
  2. 把写着最大数的卡片与 1 号盒子里的卡片进行交换。
  3. 在 2 号到 5 号盒子里,继续用「找出最大数」的方法,找到后与对应盒子里的卡片交换。

以上操作形成了具有循环结构的算法:

  1. 把卡片放入盒子,已排序个数设为 0。
  2. 在未排序数中找到最大数,与未排序的第一个数交换位置。
  3. 重复第 2 步,依次查看所有数并交换到相应位置。
  4. 按顺序呈现 5 个数。

流程图:选择排序(搜索—交换—缩小范围)

开始确定未排序区间搜索区间内最小值与区间首位交换位置缩小未排序范围并重复得到有序序列结束

2.分析选择排序的过程

5 张卡片上有 5 个数,如 108、24、12、91、35。运用选择排序算法,完成五个数从小到大的排序,验证算法执行的步骤,记录卡片交换的次数。

想一想:有同学说「我观察一下就能把这 5 个数排好顺序,不必反复操作,计算机有点笨呀!」你认同这个说法吗?

3.验证选择排序的算法

请在下方动手体验中载入并运行「选择排序」程序,观察每一轮交换后的数组变化;找到其中的循环结构。尝试修改参与排序的数据个数,再次运行,观察输出结果的变化。

本课无新基础语法;选择排序见流程图。for / if / 列表已在前面课讲过。

弄清以上要点后,再进入下方 Python Online,观察选择排序每一轮的结果。

四、动手体验 · Python 3 Online 编程

本课含 2 个程序,请在下拉中切换后分别「载入」运行。

五、课堂总结

  • 选择排序是计算机完成排序任务时常用的一种排序算法。
  • 选择排序算法借助在特定范围内,寻找最大数或最小数并交换位置的方式进行排序。
  • 通过探究选择排序与找出最大值或最小值之间的关系,可以了解算法的内在联系。

六、拓展提升

  • 在 Python 中,可以使用 sorted() 函数来进行排序。可在下方动手体验中分别运行「选择排序」与「用sorted排序」,体会同一问题可用不同程序实现。

测评

选出后点「检查」。答错会显示简短说明。

  1. 选择排序的基本思想是?

  2. 选择排序与哪一课所学内容关系最密切?

  3. 对于大量数据排序,计算机相比人工的主要优势是?

本节小结

选择排序Repeatedly在未排序区找最值并交换;与找最大数算法一脉相承。数据量大时,程序自动执行的优势更明显。