单元五 · 把数据排列有序

第19课 冒泡排序齐体验(2)

任务场景
任务场景:冒泡排序齐体验(2)

一、学习目标

  • 进一步认识冒泡排序算法,能够对一组数据进行排序过程分析。
  • 能够用程序验证排序算法,观察数据的排序过程,培养用算法解决问题的意识。

二、情境导入

上一课我们通过「排队」活动,体验了冒泡排序的算法步骤,但对具体的数据排序认识还不够深入。本课通过分析具体的数据排序,继续探究、体验其中的算法规律,并利用程序来进行验证,了解算法的程序实现。

三、核心讲解

本课学习路径:

1冒泡排序的过程分析
2验证冒泡排序的算法

1.冒泡排序的过程分析

利用冒泡排序算法,把下面的最大数交换到最后(最右侧)。以数据 5、7、9、3、6、8 为例,第一轮比较过程:

  1. 比较第一个数和第二个数,7>5,交换位置。
  2. 比较第二个数和第三个数,7<9,不交换位置。
  3. 比较第三个数和第四个数,9>3,交换位置。
  4. 比较第四个数和第五个数,9>6,交换位置。
  5. 比较第五个数和第六个数,9>8,交换位置。第一轮完成,最大数 9 已归位。

第二轮、第三轮、第四轮依次对越来越少的未排序数进行比较,每轮都会把当前未排序部分的最大数「冒泡」到最后。

规律:一轮「冒泡」排序后,会固定当前未排序数中最大数的位置,因此这个数不需要再参与下一轮的比较,比较次数减少一次。

流程图:冒泡排序程序(双层循环)

开始外层:控制排序轮数内层:相邻比较与交换本轮最大数冒泡到末尾若本轮无交换可提前结束输出有序序列结束

2.验证冒泡排序的算法

程序用外层循环控制排序轮数,内层循环控制每一轮的数据比较。若前一个数大于后一个数,就交换这两个数。大致了解程序与算法的对应关系,运行程序观察每一轮遍历后的数据顺序。尝试修改排序数据,再运行程序,观察变化。

本课巩固 break(第 15 课已出现)。无新图形块需单独讲解。

弄清以上要点后,再进入下方 Python Online,观察冒泡排序程序的执行过程。

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

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

五、课堂总结

  • 通过情境体验活动,加深了对冒泡排序算法的认识,感受到数据的比较与交换规律。
  • 一轮「冒泡」排序后,会固定当前未排序数中最大数的位置,因此这个数不需要再参与下一轮的比较,比较次数减少一次。
  • 通过利用程序验证算法,初步体会到用计算机解决问题的重要性和必要性。

六、拓展提升

  • 「报数」排序游戏:在 10 张卡片上分别写下一个 50 以内的自然数,随机分发给 10 位同学,选一位同学从 1 开始报数。当报的数与某张卡片上的数相同时,该同学手持卡片站出来。继续报数直到 50,手持卡片的同学按先后顺序站成一排,这 10 个数已经按顺序排列。用计算机解决排序问题时,也可以用类似「报数」的方法。
  • 本课下方提供了「冒泡提前结束」与「for循环冒泡」。请分别载入运行,体会同一算法的不同实现。

测评

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

  1. 冒泡排序每完成一轮后,为什么下一轮比较次数可以减少?

  2. 冒泡排序程序中,外层循环和内层循环分别控制什么?

  3. 用程序验证冒泡排序算法的主要收获是?

本节小结

逐轮分析冒泡过程,可见每轮归位一个最大数;双层循环程序对应算法步骤。程序验证让排序规律一目了然。