内容正文:
(
开始
)第19课《冒泡排序齐体验(2)》活动探究单
1、活动内容:尝试利用刚才分析的思路,将冒泡排序的整个完成的过程用流程图展示出来
2、活动准备:活动探究单
3、活动记录:
(
轮数n加1
) (
把未排序中的最大数交换到未排序数的最后面
) (
结束
) (
按顺序输出过山车刺激指数
) (
否
) (
轮数n设为1
) (
是
) (
轮数n<6?
)
学科网(北京)股份有限公司
$nullnullnull
冒泡排序齐
体验(2)
第19课
第五单元 把数据排序有序
目录
01
【第一轮冒泡排序】
最刺激的过山车
03
【流程图梳理排序】
完成最终的排序
02
【第n论冒泡排序】
整理剩余过山车
04
【用代码实现冒泡】
让计算机来排序
情景导入
我们玩了“过山车排队”游戏,知道了排队规则:
相邻两个人比较体重,如果前面比后面重,就交换位置
如何按照过山车的“刺激指数”从低到高排呢?
现场状况
今天过山车乐园再次迎来了一群兴奋的游客,他们想要体验最刺激的过山车,这样才能玩得最过瘾!
课前回顾
木质过山车
悬挂式过山车
翻转过山车
家庭过山车
课前回顾
上节课,我们玩了“过山车排队”游戏,知道了排队规则,哪个同学还记得上节课我们是如何帮助管理员排队的?(邀请同学回答)
上节课我们排队的规则是:相邻两个人比较体重,如果前面比后面重,就交换位置
今天过山车乐园再次迎来了一群兴奋的游客,他们想要体验最刺激的过山车,这样才能玩得最过瘾!
游乐园有很多不同类型的过山车,它们的刺激指数也不一样,你有什么快速的办法可以帮助游乐园的管理员如何按照过山车的“刺激指数”从低到高排呢??(邀请同学回答)
没错,我们可以继续使用上节课学习的冒泡排序来解决排队问题!
过渡:下面让我们用冒泡排序算法帮助管理员把过山车按照从低到高的刺激指数排好吧!
Part 01
最刺激的过山车
结合过山车刺激指数为切入点,深入探究冒牌排序的第一轮排序过程
最刺激的过山车
交换操作
如果左边的过山车刺激指数比右边的过山车刺激指数高,就互相交换位置。
挑战结果
经过一轮比较,最刺激的过山车会被“推”到过山车队伍的最后面。
挑战规则
我们从过山车的最前面开始,依次比较相邻的两种类刺激指数的过山车。
我们先来了解寻找最刺激的过山车的规则:
首先我们从过山车的最前面开始,依次比较相邻的两位中类型过山车。
如果左边的过山车刺激指数比右边的过山车刺激指数高,就互相交换位置。
经过一轮比较,最刺激的过山车会被“推”到过山车队伍的最后面。
最刺激的过山车
刺激指数:7
刺激指数:5
刺激指数:9
刺激指数:3
刺激指数:6
刺激指数:5
7>5?
比较数值大小
第一辆过山车刺激指数为 7,第二辆为 5。因为 7 > 5,所以第一辆更刺激。
执行交换操作
为了让更刺激的车排在后面,我们需要将这两辆过山车交换位置。
刺激指数:7
刺激指数:5
初步分析过程
这里有 6 辆过山车,每一辆都有自己的 “刺激指数”。我们的任务,就是把它们按照刺激指数从低到高排列好。
首先,我们来看最前面的两辆过山车。第一辆刺激指数是 7,第二辆是 5。7 和 5 哪个数字更大呀?(邀请学生回答)
非常好!数字越大,就代表这辆过山车越刺激。那 7 > 5,就说明第一辆比第二辆更刺激
因此,为了让更刺激的车排在后面,我们需要将这两辆过山车交换位置。
所以经过比较后,这两辆过山车的位置变成了这样子(播放下一个动画)
过渡:了解了基本过程后,那么下面,我们一起通过程序,来完成过山车刺激指数的第一轮排序吧!
最刺激的过山车
任务目标
通过“最刺激的过山车”程序,体验将过山车按照刺激指数从低到高排序的第一轮过程,并将体验的结果填写到下面的表格中
文件位置
1、学生文件 -- 1、最刺激的过山车【程序体验】--index.html
下面让我们通过“最刺激的过山车”程序,体验将过山车按照刺激指数从低到高排序的第一轮过程,并将体验的结果填写到下面的表格中
请同学们打开1、学生文件 -- 1、最刺激的过山车【程序体验】--index.html 程序,开始体验吧!(学生体验)
最刺激的过山车
7 < 9 , 不换
9 > 3 ,交换
9 > 6 ,交换
9 > 8 ,交换
5,7,9,3,6,8
5,7,3,9,6,8
5,7,3,6,9,8
5,7,3,6,8,9
第一轮结果
经过第一轮的比较,我们已经将刺激指数为9的过山车排到的最后面。
下一轮目标
在剩下的过山车中继续寻找直到所有过山车都按刺激程度排好顺序
时间到,哪个同学来说说自己的排序结果?(邀请同学回答并简单点评)
这位同学回答的非常准备,下面我们结合这个同学的思路一起来分析总结吧!
第 1 步我们已经示范过了:比较 7 和 5,因为 7>5,所以交换位置,得到了新的顺序 5,7,9,3,6,8。
现在我们来看第 2 步,要比较的是 7 和 9。7 和 9,哪个数字大?(邀请同学回答)
那 7 <9,说明现在 7 在 9 前面,符合 “小的在前,大的在后” 的规则吗?(邀请同学回答)
所以我们不需要交换它们的位置,顺序还是 5,7,9,3,6,8
接下来第 3 步,我们比较 9 和 3。9 和 3,哪个数字大?(邀请同学回答)
9 > 3,现在 9 在 3 前面,这就不符合规则了,我们要怎么办?(邀请同学回答-交换位置)
没错!交换之后,顺序就变成了 5,7,3,9,6,8。
我们用同样的方法完成第 4 步和第 5 步。
第 4 步:比较 9 和 6,9>6,交换,顺序变成 5,7,3,6,9,8。
第 5 步:比较 9 和 8,9>8,交换,顺序变成 5,7,3,6,8,9。
大家看,经过这一轮 5 次比较和交换,我们发现了什么?(邀请同学回答)刺激指数 9 的过山车跑到最后面去了!
太聪明了!第一轮结束后,我们就把最刺激的过山车(刺激指数 9)送到了队伍的最后面。这就是冒泡算法的魔力,每一轮都能把当前最大的数 “沉” 到最后。
过渡:下面我们来完成下一个目标:在剩下的过山车中继续寻找直到所有过山车都按刺激程度排好顺序。
Part 02
整理剩余过山车
通过过山车刺激指数主题,深入探究冒牌排序的第N轮排序过程
整理剩余过山车
任务目标
通过“整理剩余过山车”程序,体验将过山车按照刺激指数从低到高排序的完整过程,并将体验的结果填写到表格中
文件位置
1、学生文件 -- 1、整理剩余过山车【程序体验】--index.html
下面让通过“整理剩余过山车”程序,体验将过山车按照刺激指数从低到高排序的完整过程,并将体验的结果填写到表格中
1、学生文件 -- 1、整理剩余过山车【程序体验】--index.html 程序开始体验吧!(学生体验)
整理剩余过山车
3,5,6,7,8,9
3,5,6,7,8,9
5,3,6,7,8,9
时间到,哪个同学来说说自己探究的结果?(邀请同学分享,一边讲一遍播放答案并简单点评)
过渡:那么我们顺着这个同学的思路一起来总结分析最终的排序过程!
整理剩余过山车
第二轮比较
在剩余五辆过山车(5, 7, 3, 6, 8)中找到最刺激的那一辆。经过比较和交换,第二轮的排序结果为:
第三轮比较
在剩余四辆过山车( 5, 3, 6, 7)中找到最刺激的那一辆。经过比较和交换,第三轮的排序结果为:
第四轮比较
在剩余三辆过山车(3, 5, 6)中找到最刺激的那一辆。经过比较和交换,第四轮的排序结果为:
5,3,6,7,8,9
5,3,6,7,8,9
3,5,6,7,8,9
比较次数:n - 1
首先,在第二轮比较中,在剩余五辆过山车(5, 7, 3, 6, 8)中找到最刺激的那一辆。经过比较和交换,第二轮的排序结果为:?(5,3,6,7,8,9)
随后我们来到了第三轮比较,在剩余四辆过山车( 5, 3, 6, 7)中找到最刺激的那一辆。经过比较和交换,第三轮的排序结果为?(5,3,6,7,8,9)
接着我们来到了第四轮比较,在剩余三辆过山车(3, 5, 6)中找到最刺激的那一辆。经过比较和交换,第四轮的排序结果为:?(3,5,6,7,8,9)
并且我们发现第四轮之后,所有过山车的顺序就再也没有变化了,这说明什么?(邀请同学分享)
因为正常情况下,我们冒泡排序的比较次数为n-1次,也就是我们这里有6辆过山车,应该比较几次?(5次)
如果遇到了还没有比较五次的话,冒泡排序就会提前结束。
过渡:现在,我们已经完成了过山车的完整排序。下一部分,我们就要用流程图,把这个神奇的过程画出来,让它变得更清晰。
Part 03
完成最终的排序
利用流程图分析冒泡排序的完整过程
完成最终的排序
开始
当前位置为1
当前位置<6?
当前刺激指数>右侧刺激指数?
交换两辆过山车位置
当前位置右移1位
结束
否
否
是
第一轮冒泡排序
确定起始位置
判断是否结束
判断是否需要交换
需要交换就交换两辆过山车的位置
不需要交换就继续找下一辆过山车
直到比较完了6个数,第一轮结束
首先,我们来分析第一轮冒泡排序,那么在最开始的时候,我们要先确定起始位置,也就是在程序当中将当前位置设置为1
紧接着,我们要判断一下这个冒泡排序是否结束。那么在这里呢,因为我们总共有6辆过山车,所以我们的一个判断结束的条件就是当前位置是否小于6
如果没有结束的话,那么我们需要进行第三步判断,判断是否需要交换
那么在我们过山车刺激指数这里呢,我们的一个判断是否需要交换的条件,就是当前刺激指数是否大于右侧的刺激指数
如果我们需要交换的话,那么就交换两辆过山车的位置,不需要的话,那么我们就继续找下一辆过山车
那在我们流程图当中,如果满足了这个条件,我们就走左边的分支,交换两辆过山车的位置。否则的话,我们就走右边的分支,继续找下一辆过山车
然后我们需要一直去比较。两辆过山车的刺激指数,所以呢,我们需要将当前的位置右移一位
然后不断循环,直到比较完了6个数之后,那么我们的第一轮比较就已经完成了。最终流程呢,会走向我们的结束这一个流程
以上便是我们第一轮完成冒泡排序的流程图分析。
过渡:那么下面我们结合这个思路,一起来分析冒泡排序完整的流程图吧!
完成最终的排序
任务目标
尝试利用刚才分析的思路,将冒泡排序的整个完成的过程用流程图展示出来
文件位置
1、学生文件 -- 3、完成最终的排序【画流程图】-- 活动探究单.doc
下面同学们尝试利用刚才分析的思路,将冒泡排序的整个完成的过程用流程图展示出来。
请同学们打开1、学生文件 -- 3、完成最终的排序【画流程图】-- 活动探究单.doc 开始把流程图补充完整把!(学生实践)
完成最终的排序
时间到,哪个同学来说说你分析的这个流程图是怎样的呢?(邀请同学回答)
所以最终我们补充完成的流程图如图所示。
在开始后需要将轮数n设置为1,判断是否结束的条件是轮数小于6
如果满足我们就把未排序中的最大数交到未排序的数的最后面,
然后将轮数n加1 一直重复执行,直到轮数不再小于6,然后按照顺序输出过山车的刺激指数
整个流程就已经完成了!
过渡:但是如果每次都需要人工来进行排序的话,时间会很慢,你有什么好方法可以提高效率嘛?(邀请学生回答)
没错!我们可以借助计算机的力量来试下冒泡排序!
过渡:下面我们一起来体验冒泡排序的程序代码,简单了解它的过程吧!
Part 04
让计算机来排序
利用程序验证算法,初步体会到用计算机解决问题的重要性和必要性
让计算机来排序
任务目标
使用海龟编辑器打开“冒泡排序算法.py”,体验程序,并尝试交换位置的代码块
文件位置
1、学生文件 -- 4、让计算机来排序【代码体验】-- 冒泡排序算法.py
下面同学们使用海龟编辑器打开“冒泡排序算法.py”,体验程序,并尝试交换位置的代码块
请同学们打开1、学生文件 -- 4、让计算机来排序【代码体验】-- 冒泡排序算法.py 程序开始体验吧!(学生体验)
让计算机来排序
交换位置
比较相邻的两个元素,如果前一个元素大于后一个元素,说明顺序不对,需要进行交换
while i< n-1 : 控制外循环
使用while循环实现外层循环,外层循环控制排序的轮数,需要n-1轮(因为n个数需要比较n-1轮)
while j < n-i-1:控制内循环
因为每轮都会把当前最大数放到末尾,可以减少一次比较,所以需要n -i -1表示循环到未排序的最后一个数
哪个同学来说说,你找到的交换位置的代码在哪里呢?(邀请同学回答)
我们可以看到,if 判断条件后面的代码就是用来进行比较和交换的,这段代码的意思是比较相邻的两个元素,如果前一个元素大于后一个元素,说明顺序不对,需要进行交换
那么我们还需要关注两段代码,第一个就是:while i<n-1 这段代码表示什么呢?有没有同学知道?(邀请同学回答)
使用while循环实现外层循环,外层循环控制排序的轮数,需要n-1轮(因为n个数需要比较n-1轮)
其次还有就是while j < n-i-1这段代码表示什么呢?有没有同学知道?(邀请同学回答)
因为每轮都会把当前最大数放到末尾,可以减少一次比较,所以需要n -i -1表示循环到未排序的最后一个数
过渡:到这里我们的学习之旅也接近尾声啦~一起来复习今天都学习了哪些内容吧!
Part 05
课堂总结提升
通过情境加深对冒泡排序算法的认识,并尝试用程序代码体验“报数”排序游戏
课堂总结与提升
算法流程图描述
学会用流程图清晰表示算法步骤,理解双重循环结构:外层循环控制轮数,内层循环控制每轮比较。
编程实现与验证
了解如何编写程序实现排序算法,并通过运行程序来验证算法的正确性和效率。
冒泡排序基本过程
通过不断比较和交换相邻元素,将最大元素逐步“冒泡”到正确位置,重复直到所有元素有序。
挑战成功!
恭喜大家完成了今天的过山车挑战,掌握了冒泡排序的基本原理!
首先,恭喜大家完成了今天的过山车挑战,掌握了冒泡排序的基本原理!
这个过程,我们学习了冒泡排序的基本步骤,就是不断比较和交换;
我们学会了用流程图来描述这个过程,理解了里面的双重循环;
最后我们还知道了可以用程序来验证我们的排序结果。
课堂总结与提升-报数排序
游戏规则与过程解析
在卡片上写下数字并随机分发。从1开始报数,报到对应数字的同学立即站出来,直到所有人按顺序排好队。
过程解析:
假设四位同学拿到卡片:5、2、8、1。
1. 报“1!”,拿“1”的同学出列(第一位)。
2. 报“2!”,拿“2”的同学出列(第二位)。
3. 跳过3、4,报“5!”,拿“5”的同学出列(第三位)。
4. 跳过6、7,报“8!”,拿“8”的同学出列(第四位)。
最终顺序为:1、2、5、8,排序完成。
拓展思考
这也是一种排序方法!计算机解决问题时,往往有多种不同的算法和程序实现方法,冒泡排序只是其中一种。
除了冒泡排序,我们还有其他有趣的排序方法。比如这个“报数排序”游戏。大家可以看到插图里的场景,通过报数,我们也能让同学们按顺序排好队。这告诉我们,解决同一个问题,可能有很多不同的好方法。冒泡排序是其中非常经典和基础的一种。
课堂总结与提升-for循环
算法的多样性
前面的冒泡排序算法中,除了使用while循环,我们还可以用for循环来实现。
程序体验位置
1、学生文件 -- 5、循环结构for循环【拓展提升】 -- 冒泡排序算法【for循环版】.py
核心思维
解决同一个问题,往往有多种不同的思路和方法,这正是编程的魅力所在。
前面的冒泡排序算法中,除了使用while循环,我们还可以用for循环来实现。
感兴趣的同学可以打开1、学生文件 -- 5、循环结构for循环【拓展提升】 -- 冒泡排序算法【for循环版】.py
这个算法告诉我们解决同一个问题,往往有多种不同的思路和方法,这正是编程的魅力所在。
我们下节课
再见!!
第19课
第五单元 把数据排序有序
$null