课堂任务单:
(1)若采用冒泡排序算法对数据70,53,57,28,30,77,1进行排序,排序结果如下表所示。
原始数据
70
53
57
28
30
77
1
第一趟
1
70
53
57
28
30
77
第二趟
第三趟
1
28
30
70
53
57
77
…
…
…
…
…
…
…
..
则第二趟的排序结果是
(A)
1,28,30,70,53,57,77?????
(B)1,28,70,53,57,30,77
(C)1,28,30,53,57,70,77???
(D)1,28,30,53,70,57,77
(2)在信息加工中,经常要对被处理的数据进行排序,数据的排序有多种方法,冒泡法是一种常用的排序方法,在排序时经常要进行数据的交换。下列四个选项中,有哪几项(
)能正确地将x和y两个变量中的数据进行交换。
A:x=y
y=x
B:
x=x十y
y=x—y
x=x—y
C:m=x
x=y
y=m
D:
x=x—y
y=x十y
x=y—x
(3)
按学号从小到大整理一堆学生试卷的算法是:第一次,从上到下找出学号最小的试卷反扣在桌面上;第二次从剩余试卷中从上到下找出学号最小的试卷反扣在第一次找出的试卷上;第三次,从剩余试卷中从上到下找出学号最小的试卷反扣在第二次找出的试卷上;……,依此类推,最后完成整理工作。此算法属于
(A)排序算法
(B)对分查找
(C)递归算法
(D)解析算法
(4)
5个学生的身高(单位:cm)依次为172,177,180,168,165,采用冒泡排序对这5个学生的身高数据进行从低到高排序,总共需要比较的次数为:
A.4
B.5
C.10
D.20
(5)
5个学生的身高(单位:cm)依次为172,177,180,168,165,采用冒泡排序对这5个学生的身高数据进行从低到高排序,总共需要交换的次数为:
A.6
B.7
C.8
D.10冒泡排序法——《2.3.2冒泡排序》第1课时教学设计
教材分析
本节内容选自浙江教育出版社《算法与程序设计》第二章第三节。在教材处理上,本课时主要学习教材第二章第3节的“排序”中的冒泡排序思想、算法以及编程思路,还加入了冒泡排序算法的程序实现,下节课让学生进行上机实践。冒泡排序算法的程序实现部分的内容在教材中的并没有讲到的。这样的处理主要是为了:一是以加深学生对算法和程序设计的关系的体会;二是可以通过对程序实现的讲解和练习形成对由双重循环构建而成的程序的分析思路和分析方法,进一步加深对循环的理解。排序算法是使用频率最高的算法之一,而冒泡排序是其中一种很典型而且相对简单的方法。它的学习同时为后面的选择排序做了铺垫。通过冒泡实例的学习,可以提高学生的程序设计能力,为今后在算法与程序设计方面的进一步研究和学习打下基础。
二、学情分析
本课的授课对象是灵石中学高二选考学生。学生来自于各个班级走班,学生学习态度,学差距比较大,目前已学习
“算法与程序设计”基础内容,具备一定观察、分析和动手实践能力,简单的单层循环能基本理解。但对于比较复杂的双层循环认知度较低。因此,对于用自然语言和流程图语言描述的算法,大多能理解,但是,最后落实到用程序设计语言来编写程序,则比较困难。如何让学生实现自然语言和流程图语言向程序设计语言转化,是比较大的挑战。
三、教学目标及重难点
一、教学目标
知识目标:掌握冒泡排序的原理;理解冒泡排序的流程图;编写冒泡排序的主要代码;
能力目标:学会使用冒泡排序思想设计解决简单排序问题的算法;进一步理解程序设计的基本方法,体会程序设计在现实中的作用;
情感目标:培养学生分析问题、发现规律的能力,激发学生学习热情;培养良好的程序书写习惯;
二、重点难点
重点:理解冒泡排序原理及它的流程图
难点:理解冒泡排序中的遍、次等概念(即对变量使用的理解)
四、设计思路
算法与程序设计,本身是比较枯燥,如果长篇大论讲冒泡排序的原理,变成老师一人在唱独角戏,学生学习就很被动。如何引起学生的学习兴趣,调动学生的课堂参与度是课堂能否成功的关键,学生是学习的主体,在教学中如何发挥学生的主观能动性,是教师进行教学设计时应该特别注意的,教师举的实例要和生活密切相关,这在很大程度上不仅可以解除了学生对编程的恐惧,而且通过学习最后自己解决学习与生活中的问题,使学生的学习更具激情,这也很好的调动了学生的学习兴趣。教学中要时刻想到“如何引导学生思考”为主线,让学生自己发现问题、提出问题、进而解决问题。但是要特别强调的是在整个教学过程,教师要适时引导学生思考的方向使其不要偏离教学的目的。
基于以上分析,教学中我采用以循序渐进、层层深入为教学的指导方针,采用讲解法、演示法、讨论合作、分析归纳法引导学生参与思考,由特殊到一般,有效地突出重点突破难点,逐步深化对冒泡算法、循环思想和执行过程的理解。
五、教学流程
环节
教师活动
学生活动
设计意图
时间
创设情境导入新课
情景案例:学号,排序
教师:请5位同学从前到后坐好并拿好老师给你们的数字卡片,然后从后面开始两个两个比较你们手中的数,如果后面的同学数小的话就和前面的同学换一下座位,直到拿到最小数的同学坐在第一个位子为止。
同时在黑板贴五张数字卡片,其他同学们进行排序;
(同学们排序很快,但是当卡片增多时会很麻烦,效率很低)
板书本课时的学习方法:实践、探究、交流。
教师:显然,今天我们学习的将和排序有关,这就是算法与程序设计第二章第三节中的内容,大家思考如何让计算机进行排序?
PPT、板书课题——冒泡排序
完成排序游戏
跟随教师思路,进入情景
思考问题
导入学习情景
4分钟
讲授新课
冒泡排序法
教师:它的名字非常生动形象,之所以称为冒泡排序因为它的原理与冒泡过程相似。这里的冒泡是一种排序思想,根据它还能衍生出很多种方法,今天学习一中最简单常用的,从前往后的冒泡排序。
冒泡排序法原理
教师:对原始数据,按从后往前的方向进行多次扫描(每次扫描称为一趟),当发现相邻两个数据的次序与排序要求的大小次序不符合时,就将这两个数据进行互换。
这样,较小的数据就会逐个向前移动,好像气泡向上浮起一样。
(教师ppt演示冒泡排序原理,简单板书原理)
冒泡排序法算法
(1)首先比较最后一个和倒数第二个数据,将其中较小的数据放到上一个位置,较大的放到最后一个位置;
(2)然后比较倒数第二个和倒数第三个数据,仍将较大放到后一个位置。依此类推,直到比较第二个和第一个数据。(这样,就将待排序序列中的最小的数据已经上升到第一个元素的位置,这个过程称为第一趟排序)
(3)对剩下的n-1个数据重复(1)(2)过程(不用考虑第一个数据,因为它已经是最小的了),又将次小的数据放到了第2个位置。重复这个过程,直到循环n-1次为止。
(特别要强调怎样算一遍(趟)处理,而且每遍总是从“最下面起”,“自下而上”,比较“相邻”两数。)
画流程图
这块内容是本节课的重点,采用自顶向下逐步求精的方式,由特殊到一般归纳总结,利用模块化,各个难点一一突破。
(1):以5个数的排序为例,演示冒泡排序的逐个过程,再次强化学生对冒泡排序过程的理解。(教师要书写每遍排序过程中两两比较的数、比较的次数、待排序的第一个数)
(2)小结排序过程:5个数总共进行了4轮排序。每轮排序冒起一个最小数,于是转化成右侧流程图。
流程图一
(ppt演示)
这种结构实际上属于什么结构――循环结构,但是不规范的,我们需要用一个变量来控制循环次数,从而引出用变量i来记录正在执行的排序的遍数,它的值是从1到4,每次做完后加1。让学生回顾一下循环结构的流程图模式,两两学生讨论,合作将上面流程图转换成下面的流程图二
思考:如果参与排序的是n个数呢?
比较遍数与个数关系:遍数=个数-1(板书)
(ppt演示,层层推进)流程图二
如何进行不断两两比较交换?
用表格罗列,找出规律;
引导学生发现规律:每次都是从最后面一个数开始比较,最后一个参与比较的数的下标与比较的遍数有关:遍数+1(板书)
思考:共n个数呢?
这里又需要用一个变量来标识正在参加比较的数组元素的下标,引进变量j:记录一遍处理过程中,当前数组元素下标。
流程图三(n个数)
不断两两比较交换
(ppt演示流程图)
将流程图三“两两比较交换”纳入流程图二,即得下面的总流程图:
总流程图
n:参加排序的数组元素总个数
i:记录正在执行的排序的遍数,由1变到n-1
j:记录一遍处理过程中,当前数组元素下标,由n变到i+1(板书)
(总结得出结果,ppt演示)
5、流程图→程序语言
思考问题:如何将流程图实现为程序?
采用什么结构循环?
已知循环次数,用for…next比较简单。
教师:引导学生思考排序过程如何用VB语言实现。
(对照总流程图,自上往下,写出主要参考代码)
思考问题:冒泡排序是一个双重循环
,一共循环了多少次?
6、课堂作业
ppt课堂小练习
理解思考
思考并回答问题
和教师一起回顾观察排序过程
思考并回答问题
学生思考
思考找出规律
学生思考
和教师一起回顾观察排序过程
学生思考
引导学生认识冒泡排序法
使学生熟悉冒泡排序过程
自顶向下逐步求精;
由特殊到一般归纳总结;
利用模块化,各个难点一一突破;
所有问题、难点细化解决
分解问题,逐步写出VB代码
2分钟
2分钟
4分钟
2分钟
2分钟
2分钟
8分钟
4分钟
5分钟
4分钟
课堂小结
要点总结:
冒泡排序法原理
冒泡排序的流程图
冒泡排序法VB语言程序实现
(板书)
思考回顾
课堂重点内容回顾
1分钟
布置作业
作业:
(1)如果要按照从大到小排序,哪个地方需要改下?
(2)学生活动手册《实践十》准备;
完成作业
扩展思维、巩固提高
课堂任务单:
(1)若采用冒泡排序算法对数据70,53,57,28,30,77,1进行排序,排序结果如下表所示。
原始数据
70
53
57
28
30
77
1
第一趟
1
70
53
57
28
30
77
第二趟
第三趟
1
28
30
70
53
57
77
…
…
…
…
…
…
…
..
则第二趟的排序结果是
(A)
1,28,30,70,53,57,77?????
(B)1,28,70,53,57,30,77
(C)1,28,30,53,57,70,77???
(D)1,28,30,53,70,57,77
(2)在信息加工中,经常要对被处理的数据进行排序,数据的排序有多种方法,冒泡法是一种常用的排序方法,在排序时经常要进行数据的交换。下列四个选项中,(BCD
)能正确地将x和y两个变量中的数据进行交换。
A:x=y
y=x
B:
x=x十y
y=x—y
x=x—y
C:m=x
x=y
y=m
D:
x=x—y
y=x十y
x=y—x
(3)
按学号从小到大整理一堆学生试卷的算法是:第一次,从上到下找出学号最小的试卷反扣在桌面上;第二次从剩余试卷中从上到下找出学号最小的试卷反扣在第一次找出的试卷上;第三次,从剩余试卷中从上到下找出学号最小的试卷反扣在第二次找出的试卷上;……,依此类推,最后完成整理工作。此算法属于
(A)排序算法
(B)对分查找
(C)递归算法
(D)解析算法
(4)
5个学生的身高(单位:cm)依次为172,177,180,168,165,采用冒泡排序对这5个学生的身高数据进行从低到高排序,总共需要比较的次数为:
A.4
B.5
C.10
D.20
(5)
5个学生的身高(单位:cm)依次为172,177,180,168,165,采用冒泡排序对这5个学生的身高数据进行从低到高排序,总共需要交换的次数为:
A.6
B.7
C.8
D.10
7(共19张PPT)
冒泡排序
情景:
观察水中的气泡往上冒的情景,有什么特点呢?
五位同学表演怎样冒泡
任务:请五位同学扮演5个数据(气泡)
规则:然后从后面开始两个两个比较你们的数。如果后
面的同学数小的话就和前面的同学换一下位置。
初级目标:直到最小数的同学坐在最前面。
终极目标:从前到后,从小到大有序数列。
原始序列
d(1)
27
d(2)
36
d(3)
32
d(4)
18
d(5)
3
最终序列
d(1)
3
d(2)
18
d(3)
27
d(4)
32
d(5)
36
冒泡排序:把较小的数据逐次向上推移的一种排序技术。
如何实现将较小数逐次从下向上推移呢?
从最后一个元素起,依次比较相邻的两个
元素中的数据,将较小的数据调换到上面。
d(1)
27
d(2)
36
d(3)
32
d(4)
18
d(5)
3
空椅子
空椅子
3
空椅子
3
空椅子
d(1)
27
d(2)
36
d(3)
32
d(4)
d(5)
18
d(1)
27
d(2)
36
d(3)
32
d(4)
3
d(5)
18
(1)第一次冒泡
d(1)
27
d(2)
36
d(3)
32
d(4)
3
d(5)
18
d(1)
27
d(2)
36
d(3)
32
d(4)
18
d(5)
两个数进行数据交换,就象两杯水进行交换,需要再拿一个空杯
(1)第一趟冒泡(最小数冒到最上面)
d(1)
27
d(2)
36
d(3)
32
d(4)
3
d(5)
18
d(1)
27
d(2)
36
d(3)
3
d(4)
32
d(5)
18
d(1)
27
d(2)
36
d(3)
3
d(4)
32
d(5)
18
d(1)
27
d(2)
3
d(3)
36
d(4)
32
d(5)
18
d(1)
27
d(2)
3
d(3)
36
d(4)
32
d(5)
18
d(1)
3
d(2)
27
d(3)
36
d(4)
32
d(5)
18
画流程图一
5个数总共进行了4轮排序。每轮排序冒起一个最小数
这是什么结构?
思考:如果参与排序的是n个数呢?
比较遍数与个数关系:遍数=个数-1
转换成标准流程图二
流程图二(推广到n个数)
如何进行不断两两比较交换?
用表格罗列,找出规律:
规律:每次都是从最后面一个数开始比较,最后一个
参与比较的数的下标与比较的遍数有关:遍数+1
思考:共n个数呢?
这里又需要用一个变量来标识正在参加比较的数组元素的下标,
引进变量j:记录一遍处理过程中,当前数组元素下标
小结论:共n个数,第i遍处理时,j的值从n到i+1之间递减,
每次d(j)与它的前一个数d(j-1)进行比较
流程图三(n个数)
不断两两比较交换:
总流程图:
n:参加排序的数组元素总个数
i:记录正在执行的排序的遍(趟)数,由1变到n-1
j:记录一遍处理过程中,当前数组元素下标,由n变到i+1
思考:
总共数据比较了多少次?
总共数据交换了多少次?
流程图→程序语言
for
i=1
to
n-1
‘i记录正在执行的排序的遍数,由1变到n-1
for
j=n
to
i+1
step
-1
'j记录一遍处理过程中,
当前数组元素下标,由n变到i+1
if
d(j)then
'如果d(j)比d(j-1)小
k=d(j):d(j)=d(j-1):d(j-1)=k
'd(j)与d(j-1)互换
endif
next
j
next
i
演示动画
扩展:
如果要按照从大到小排序,哪个地方需要改下?
小结:
冒泡排序法原理
冒泡排序的流程图
冒泡排序法VB语言程序实现
下课了。。。
休息一会儿。。。
追
求