冒泡排序教学设计

合集下载

2024-2025学年人教版(2024)信息科技三年级全一册 第19课 冒泡排序齐体验(2)教学设计

2024-2025学年人教版(2024)信息科技三年级全一册 第19课 冒泡排序齐体验(2)教学设计

第19课冒泡排序齐体验(2)一、教学目标1.学生能够进一步认识冒泡排序算法,能够对一组数据进行排序过程分析。

2.学生能够用程序验证排序算法,观察数据的排序过程,培养用算法解决问题的意识。

二、教学重点与难点教学重点1.让学生深入理解冒泡排序的基本过程,包括每一轮的比较和交换操作以及如何将最大数逐步移动到正确位置。

2.引导学生分析冒泡排序过程中数据的变化情况,以及不同轮次比较次数的规律。

教学难点1.用流程图准确、完整地描述冒泡排序算法,尤其是对循环结构和判断条件的正确表达,以及如何体现每一轮的操作细节。

2.帮助学生理解程序与算法的对应关系,使学生能够从程序中找到实现算法各个步骤的语句。

三、教学准备1.准备教学课件,包含冒泡排序算法的详细流程图示例、Python程序示例等。

2.确保教室的计算机设备能够正常运行Python编程环境(如果条件允许)。

四、教学过程(一)导入新课1.回顾上节课学习的冒泡排序的基本概念和初步体验过程,提问学生:“上节课我们通过‘排队’游戏体验了冒泡排序算法,谁能简单说一说冒泡排序是怎么做的呢?”请几位学生回答,回顾冒泡排序的基本步骤,如比较相邻数、交换位置等。

2.展示一些无序的数据排列,如[12,35,28,47,19],引导学生思考如何进一步深入了解冒泡排序算法来对这些数据进行排序。

3.引入本节课的主题——冒泡排序齐体验(2),告诉学生本节课将更深入地学习冒泡排序算法,包括分析其过程以及用程序进行验证。

(二)新课讲解1.冒泡排序的过程分析任务1:把最大数交换到最后数据示例讲解在黑板上写出一组数据,如9,8,6,5,3,7,向学生介绍任务:利用冒泡排序算法,把最大数排列到最后(最右侧)。

引导学生从左到右依次比较相邻的两个数,如果左边的数比右边的数大,就交换它们的位置。

例如,先比较9和8,因为9>8,所以交换位置,得到8,9,6,5,3,7。

接着比较9和6,同样因为9>6,再次交换位置,得到8,6,9,5,3,7,以此类推,直到比较完所有相邻的数。

《冒泡排序》 学历案

《冒泡排序》 学历案

《冒泡排序》学历案一、学习目标1、理解冒泡排序的基本概念和原理。

2、能够用编程语言实现冒泡排序算法。

3、分析冒泡排序算法的时间复杂度和空间复杂度。

4、比较冒泡排序与其他排序算法的优缺点。

二、学习重难点1、重点(1)掌握冒泡排序的基本步骤和逻辑。

(2)能够通过代码实现冒泡排序。

2、难点(1)理解冒泡排序的时间复杂度分析。

(2)优化冒泡排序算法以提高其性能。

三、知识准备1、了解数组的概念和基本操作。

2、熟悉一种编程语言,如 Python、C++等。

四、学习过程1、概念引入想象一下,我们有一排无序的数字,就像一群没有排队的小朋友。

现在我们要让它们按照从小到大的顺序排好队。

冒泡排序就是一种帮助我们完成这个任务的方法。

2、原理讲解冒泡排序的基本思想是:每次比较相邻的两个元素,如果顺序不对,就把它们交换位置。

就像水中的气泡,较小的数字会逐渐“浮”到数组的顶端。

例如,有一组数字 5, 3, 8, 4, 2 。

第一轮比较:先比较 5 和 3,因为 5 大于 3,所以交换位置,得到 3, 5, 8, 4, 2 。

接着比较 5 和 8 ,位置不变,再比较 8 和 4 ,交换位置得到3, 5, 4, 8, 2 ,最后比较 8 和 2 ,交换位置得到 3, 5, 4, 2, 8 。

这一轮结束后,最大的数字 8 就“浮”到了最后。

第二轮比较:重复上述过程,得到 3, 4, 2, 5, 8 。

第三轮比较:得到 3, 2, 4, 5, 8 。

第四轮比较:得到 2, 3, 4, 5, 8 ,排序完成。

3、代码实现以下是用 Python 语言实现冒泡排序的示例代码:```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n i 1):if arrj > arrj + 1 :arrj, arrj + 1 = arrj + 1, arrjarr = 64, 34, 25, 12, 22, 11, 90bubble_sort(arr)print("排序后的数组:", arr)```4、时间复杂度分析冒泡排序的平均时间复杂度和最坏情况下的时间复杂度都是O(n²) 。

冒泡排序教学设计

冒泡排序教学设计
print(is_sorted(sorted_array)) # 应输出 True
print(is_sorted(unsorted_array)) # 应输出 False
```
答案:True, False
例题5:给定一个整数数组,编写一个冒泡排序的变种,使得数组中的所有偶数都排在所有奇数之前,但不需要对偶数或奇数内部进行排序。
```
for i from 0 to n-1
for j from 0 to n-i-1
if array[j] > array[j+1]
swap(array[j], array[j+1])
```
- Python代码示例:
```python
def bubble_sort(arr):
n = len(arr)
```
解答:这个冒泡排序代码的时间复杂度是O(n^2)。外层循环运行n次,内层循环平均运行n/2次,所以总的运行次数约为n*(n/2),即O(n^2)。
例题3:给定一个整数数组[5, 1, 4, 2, 8],请使用冒泡排序算法对其进行排序,并输出每轮排序的结果。
解答:
```python
def bubble_sort(arr):
- 遍历序列:从第一个元素开始,比较相邻的两个元素。
- 交换元素:如果相邻的两个元素顺序错误,即前者大于后者,则交换它们的位置。
- 标记有序:如果一轮比较中没有发生任何交换,说明序列已经有序,将布尔变量设为true。
- 结束条件:当布尔变量为true时,排序结束。
3. 冒泡排序的代码实现
- 伪代码:
- 提出问题:引导学生思考日常生活中排序的例子,如排队、整理物品等,并提问:“计算机是如何进行排序的?”

冒泡排序教学设计

冒泡排序教学设计
– 取数(什么是取数?) – 交换(什么是交换?)
• 总结你们小组的排序规则;
小组演示
请思考: 该组所使用的排序方法能不能成为一种算法?
冒泡排序
什么是冒泡排序?
• 把待排序的几个数据竖直堆放,从最下面的一个数据起, 自下而上比较相邻的两个位置的数据,将数值较小的数据 换到靠上位置(交换),然后重复这一过程,直到处理完 最后位置的两个数据。(P59)
3
5
28 i
j -1
41
j
一般情况变化过程:
41,5,28,3 41,5,3,28 41,3,5,28 3,41,5,28 3,41,5,28 3,5,41,28 3,5,28,41
在本次冒泡排序中: 交换次数:? 取数次数:?
最糟情况变化过程:
41 41 41 3 3 3 3 28 28 3 41 41 5 5 5 3 28 28 5 41 28 3 5 5 5 28 28 41
j -1
5
j
28
冒泡排序(一般情况)
1 41 25 3 28 43
41 i j -1

j
5
28
冒泡排序(一般情况)
1 41 25 3 28 43
3i j -1
41
j
5
28
冒泡排序(一般情况)
1 41 25 3 28 43
3
41 i
5 j -1
28
j
冒泡排序(一般情况)
1 41 25 3 28 43
3
41 i
5 j -1
28
j
冒泡排序(一般情况)
1 41 25 3 28 43
3
41 i j -1
5

冒泡排序法教案

冒泡排序法教案

冒泡排序法教案第一篇:冒泡排序法教案数据结构——冒泡排序(第19讲,第9章)一、复习回顾什么是排序:排序是把一个无序的数据元素序列整理成有规律的按排序关键字递增(或递减)排列的有序序列的过程。

/************************************************(已经学过的排序方法有:直接插入排序、希尔排序、直接插入排序:顺序的把待排序序列中的各个记录按其关键字的大小,插入到已排序的序列的适当位置。

希尔排序:(缩小增量排序),不断把待排序的记录分成若干个小组,对同一组内的记录进行排序,在分组时,始终保持当前组内的记录个数超过前面分组排序时组内的记录个数。

)************************************************/二、第一小节(目标:理解掌握冒泡思想)1、给出冒泡排序的定义(25分钟)将待排序序列中第一个记录的关键字R1.key与第二个记录的关键字R2.key作比较,如果R1.key>R2.key,则交换记录R1和R2在序列中的位置,否则不交换;然后继续对当前序列中的第二个记录和第三个记录作同样的处理,依此类推,知道序列中倒数第二个记录和最后一个记录处理完为止,我们称这样的过程为一次冒泡排序。

2、请学生上台做排序练习(15分钟做题+10分钟讲解)(巩固排序思想的掌握)第一题: 38 5 19 26 49 97 1 66 第一次排序结果:5 19 26 38 49 1 66 [97] 第二次排序结果:5 19 26 38 1 49 [66 97] 第三次排序结果:5 19 26 1 38 [49 66 97] 第四次排序结果:5 19 1 26 [38 49 66 97] 第五次排序结果:5 1 19 [26 38 49 66 97] 第六次排序结果:1 5 [19 26 38 49 66 97] 第七次排序结果:1 [5 19 26 38 49 66 97] 最后结果序列: 1 5 19 26 38 49 66 97第二题: 8 7 6 5 4 3 2 1数据结构——冒泡排序(第19讲,第9章)答第一次排序: 7 6 5 4 3 2 1 [8] 第二次排序: 6 5 4 3 2 1 [7 8] 第三次排序: 5 4 3 2 1 [6 7 8] 第四次排序: 4 3 2 1 [5 6 7 8] 第五次排序: 3 2 1 [4 5 6 7 8] 第六次排序: 2 1 [3 4 5 6 7 8] 第七次排序:1 [2 3 4 5 6 7 8] 最后结果序列: 1 2 3 4 5 6 7 8第二题: 1 2 3 4 5 6 7 8 第一次排序: 1 2 3 4 5 6 7 [8] 第二次排序: 1 2 3 4 5 6 [7 8] 第三次排序: 1 2 3 4 5 [6 7 8] 第四次排序:1 2 3 4 [5 6 7 8] 第五次排序: 1 2 3 [4 5 6 7 8] 第六次排序: 1 2 [3 4 5 6 7 8] 第七次排序: 1 [2 3 4 5 6 7 8] 最后结果序列: 1 2 3 4 5 6 7 8]从练习题中引出:一次冒泡排序的结果:使关键字最大的记录排在了序列的最后一个位置上。

冒泡排序教案

冒泡排序教案

冒泡排序教案教学目标:1. 了解冒泡排序算法的原理和基本思想。

2. 掌握冒泡排序的具体实现方法。

3. 能够编写并调试简单的冒泡排序程序。

4. 培养学生的逻辑思维能力和问题解决能力。

教学重点:1. 冒泡排序算法的原理和基本思想。

2. 冒泡排序的具体实现方法。

教学难点:1. 冒泡排序算法的思维转换。

2. 冒泡排序算法的时间复杂度分析。

教学准备:1. 教师:课件、冒泡排序相关的演示材料。

2. 学生:学习工具(笔、纸)、计算器。

教学过程:一、导入(5分钟)1. 引入冒泡排序主题,提出一个问题:如何对一组数字进行排序?2. 让学生回答问题,并展开讨论,引出排序算法的重要性。

二、概念解释(10分钟)1. 解释冒泡排序的基本思想:通过相邻元素之间的比较和交换,将较大(或较小)的元素逐渐“浮”到数列的顶端(或底端)。

2. 解释冒泡排序的实现过程:从第一个元素开始,依次比较相邻的两个元素,如果顺序不正确则交换位置,直至整个数列有序。

3. 通过示意图和具体示例来说明上述概念。

三、算法实现(15分钟)1. 分析冒泡排序的算法流程,将其转化为可执行的伪代码。

2. 编写冒泡排序的具体实现步骤,结合具体示例进行演示。

四、时间复杂度分析(10分钟)1. 解释冒泡排序的时间复杂度:在最坏情况下,冒泡排序需要进行n次(n为待排序元素个数)的比较和交换操作。

2. 计算冒泡排序的平均时间复杂度:通过估算比较和交换操作的次数,得出冒泡排序的平均时间复杂度为O(n^2)。

3. 解释时间复杂度对算法效率的影响,引导学生思考如何改进冒泡排序算法的效率。

五、练习与拓展(15分钟)1. 给出几组无序的数字,要求学生用冒泡排序算法进行排序,并手动记录每一轮的比较和交换过程。

2. 提供更加复杂的排序问题,让学生思考如何利用冒泡排序解决。

六、总结与展望(5分钟)1. 对于冒泡排序算法的基本原理和实现步骤进行简要总结。

2. 引导学生思考冒泡排序算法的优缺点以及可能的改进方向。

冒泡法排序教案

冒泡法排序教案

冒泡法排序教案《冒泡法排序》教学案例 一、教材分析: 冒泡法排序是处理数据的一个行之有效的常用方法,是教材的重点学习内容。

教材通过实例,介绍了最为直观的冒泡排序法,展示了冒泡排序的过程,通过问题的解决达到明确算法的思路,并将思路整理之后能够熟练地转化为程序代码,这当然是教学目的之所在。

 二、学情分析: 1、应有知识:数组概念及运用;循环嵌套使用;取数组中的最小值;交换两个变量的值; 2、课前准备:请学生找出现实生活中对数据进行排序后使用的例子;如考试成绩排名或者运动会成绩排名,模拟排序过程; 三、教学目标: 1.知识与技能: 1)理解数组的概念,学会用简单的数组处理、表示数据. 2)掌握冒泡法排序的原理. 3)掌握冒泡法排序程序的实现和优化. 4)学会用冒泡法对数据进行排序. 2.过程与方法: 经历分析、实践、讲解、探究、归纳,通过循序渐进、层层深入,逐步深化对循环思想和执行过程的理解。

 3.情感、态度与价值观: 1)积极引导,循循善诱,并一环扣一环,层层分析,同时发挥学生主体作用,步步深入,找出算法规律,使冒泡法排序这个较为复杂抽象的算法变得浅显易懂 2)通过在实际的问题中分析冒泡法排序结构,从程序设计领域进一步提升学生的信息素养。

 四、教学重点、难点: 1)教学重点:冒泡排序原理及程序实现。

 2)教学难点:①冒泡排序的程序实现;②算法及程序的优化。

 五、教学方法:演示法、讲授法、讨论法、练习法。

 六、课时:1课时 七、教学过程: (一)复习回顾(3分钟) 1、一维数组定义及赋值2、三个数的排序(从小到大) (二)创设情景、导入(6分钟) 探讨:上星期运动会结束后,各个运动员的成绩已经出来了,请同学们考虑一下如何排序得出一、二、三名。

 学生:可以通过Excel排序功能,或者可以通过编程的方式。

 老师:我们今天就一起来讨论如何通过编程的方式来完成排序。

请同学们说说有什幺方法幺? 学生:首先把所有运动员的成绩放在一个数组a(1ton)里(n为常量,代表运动员人数),然后a(1)分别和a(2)、a(3)、a(4)……a(n)比较,这样a (1)就能得到最高成绩,同样a(2)分别和a(3)、a(4)……a(n)比较,a(2)里就能得到第二高的成绩,以此类推,就能从大到小排序了。

《冒泡排序法》教学设计

《冒泡排序法》教学设计

《冒泡排序法》教学设计一、教材分析本节内容选自高等教育出版社《C语言程序设计》第八章第三节。

本节的内容是数组的排序方法,其中冒泡排序法是本节中比较枯燥的一部分,内容略有难度,但它为以后的排序讲解奠定了基础。

二、学习者分析本次课程授课对象是中职计算机网络二年级学生,在之前的教学基础上,他们具备了初步的编程思想和编程能力,但他们不喜欢进行理论学习。

他们都是00后,是移动互联网的原住民,他们被称为微一代,搜一代,ipad一代,更习惯通过移动终端接受新鲜事物,所以我将教学任务由易到难进行划分,引导学生像打游戏一样对教学任务进行逐个击破。

三、教学目标1、知识目标:掌握冒泡排序的基本原理,能读懂冒泡排序的算法。

2、能力目标:让学生进一步理解程序设计的基本方法,能够使用冒泡排序进行程序的编写。

3、素质目标:培养学生团队合作的能力,激发学生自主学习的意识。

四、教学重难点教学重点:冒泡排序法的基本原理和实现方法。

教学难点:实现冒泡排序的程序编写。

五、教学方法和策略由于本节课理论知识较为枯燥,所以我采用多种信息化教学手段,微信、、蓝墨云班课,视频动画,游戏等来调动学生学习的积极性,在教学方法上,采用任务驱动法、合作探究法、游戏教学法、演示法来引导学生的自主学习、自主探究和自我创新。

六、教学过程舞蹈中完成排序。

增加人数可以让学生体会到算法的好处。

二、析惑1、展示flash动画小游戏,布置任务一:利用冒泡排序法对五人身高进行排序后一共经过了几趟排序?2、教师进行现场总结。

每两个相邻人物进行比较,前一个数据大于后一个就进行交换,否则不交换,5个人比较4趟后排序成功。

教师对学生的表现予以评分第一150 170 160 120 180小组合作探究,分组在课堂上进行解说学生利用云班课进行组内和组间评分锻炼学生的思维表达能力。

让学生直观的感受到冒泡排序的实现过程。

完成课堂的第一次过程性评价。

{for(j=0,j<=3;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1] =t;}}为了让学生直观的了解每一步数据交换的程序代码,教师展示同步动画。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高一冒泡排序教学设计一、设计思想算法与程序设计具有高度的抽象性和严密的逻辑性,教师难教、学生难学成为一个突出的现象。

如何消除学生畏惧心理,充分调动学生的积极性,正是我设计该课的主要目标。

程序设计的基本方法是自顶向下地逐步求精和模块化。

自顶向下地逐步求精是指首先要对所设计的系统有一个全面的理解,其次从顶层开始连续地逐层向下分解,直到系统的所有模块都被分解为一条条的详细指令时为止。

模块化是指把一个大的程序按照一定的原则划分为若干个相对独立但又相关的小程序(模块)的方法。

依据这个基本方法,在教师的引导下,从简单到复杂,从粗到精,各个难点分解,最后师生共同完成总流程图的设计。

在整个过程中,教师要积极引发学生的思考,让他们真正参与进来。

二、教材分析本节内容选自浙江教育出版社《算法与程序设计》第二章第三节和第五章第三节。

以第二章内容为主,下节课让学生进行第五章编写程序及上机实践。

《课程标准》指出《算法与程序设计》模块教学主要目的是“使学生进一步体验算法思想,了解算法和程序设计在解决问题过程中的地位和作用;能从简单问题出发,设计解决问题的算法,并能初步使用一种程序设计语言编制程序实现算法解决问题。

”冒泡排序的算法及程序实现就很好地较全面地体现了这点。

排序算法是使用频率最高的算法之一,而冒泡排序是其中一种很典型而且相对简单的方法。

它的学习同时为后面的选择排序做了铺垫。

通过冒泡实例的学习,可以提高学生的程序设计能力,为今后在算法与程序设计方面的进一步研究和学习打下基础。

三、学情分析我是先上第一、三、四章,再上第二和第五章。

通过前面三章的学习,同学们已经了解了算法设计的基本知识,学会了利用自然语言和流程图描述解决问题的算法,对排序中碰到的循环结构的流程图和循环语句以及数组变量的使用方法都已有基础。

但由于实践比较少,对以前知识的遗忘率比较高,画流程图还不太熟练,程序设计思想比较弱。

因此由浅入深,逐步引导比较适合学生的口味。

四、教学目标知识目标:掌握冒泡排序的原理;理解冒泡排序的流程图;编写冒泡排序的主要代码;能力目标:学会使用冒泡排序思想设计解决简单排序问题的算法;进一步理解程序设计的基本方法,体会程序设计在现实中的作用;情感目标:培养学生分析问题、发现规律的能力,激发学生学习热情;培养良好的程序书写习惯;五、重点难点重点:理解冒泡排序原理及它的流程图难点:理解冒泡排序中的遍、次等概念(即对变量使用的理解)六、教学策略与手段采用讲解法、演示法、讨论合作、分析归纳法引导学生参与思考,用逐步求精的方式降低学生的理解难度,化抽象为具体,由特殊到一般,有效地突出重点突破难点。

七、课前准备1.教师的教学准备:冒泡排序的课件2.教学环境的设计与布置:多媒体网络教室、投影机、多媒体教学平台、flash软件八、教学过程一、导入:创新情景我们经常会碰到要排队的情况,比如排座位,做操、排大合唱队伍等。

今天我想请四位同学上来表演一下排队。

我报了四位学生的名字,让他们上来,并让他们按报到的次序排起来。

问:他们现在是按什么排的?――学号(我有意按学号报的)。

好,现在请你们按身高从矮到高排起来。

不一会四位学生就排好了。

【设计意图】一开始让四位学生上来,其他学生觉得挺有意思的,所以注意力一下都集中过来。

我指着其中一位换到前面去的学生,问大家他是怎么知道自己矮的。

这时下面有学生在喊,他本来就是矮的,还有学生说一看就知道了。

我又请这位学生谈谈他当时的想法。

一般学生会提到与别人比一下,矮的话就换上去了(如果说不出来,教师可以适当引导一下)。

师:对,肯定要比一下才知道,而且需要交换。

有些学生说一看就知道,其实也是看了以后经过大脑思维飞快比较得出的结论。

排队其实是一种排序:通过调整位置,把杂乱无章的数据变为有序的数据。

如Excel中的排序功能,通过本节课的学习我们自己也可以设计出类似的小软件。

二、新课排序的方法很多,这节课我们来学习其中一种比较典型的排序方法――冒泡排序。

1.冒泡排序的基本思想教师可以先让学生根据字面意思想像一下“冒泡”是一个怎么样的情景――气泡一个一个从下往上不断地冒上来。

然后一边讲解一边以文字形式给出冒泡排序的基本思想(书P31略)。

特别要强调怎样算一遍处理,而且每遍总是从“最下面起”,“自下而上”,比较“相邻”两数。

我请刚才那四位学生仍先按学号排回来,然后演示利用冒泡排序法进行从矮到高排序的过程。

学生在进行表演时,教师可以充当解说员,关键的地方进行提示,如每遍的开始和结束,同时引导学生认识到第几遍处理完找到的应该是第几矮的同学(或第几小的数)。

【设计意图】学生的表演比单独拿出几个数来比较往往更能吸引学生的注意力,学生们在轻松活跃的气氛中明确了冒泡排序的基本方法。

演示完毕,教师提出一个问题:4位学生共进行了几遍查找?为什么?然后再用一个flash动画演示规模为4的数组变量d的数据按非减次序进行冒泡排序的逐个过程,再次强化学生对冒泡排序过程的理解。

也为下面每一遍中两两交换情况的分析做了铺垫。

2.画流程图(按非减次序排序)这块内容是本节课的重点,采用自顶向下逐步求精的方式,由特殊到一般归纳总结,利用模块化,各个难点一一突破。

以具体的情况4个数为例,由最简单的流程图一左侧的图开始,让学生将冒泡排序过程用形象的语言表示出来:不断冒起一个泡(最小数),于是转化成右侧流程图。

流程图一(4个数)思考:以4个数为例,这里的“不断”有没有限定,到底是几遍呢?为什么? 流程图二(4个数)给出流程图二左边的图之后,教师可以让学生思考一下,这种结构实际上属于什么结构――循环结构。

但是左图是不规范的,我们需要用一个变量来控制循环次数,从而引出用变量i 来记录正在执行的排序的遍数,它的值应该是从1到3,每次做完后加1。

让学生回顾一下循环结构的流程图模式,两两学生讨论,合作将上面流程图二左侧的图转换成右侧规范的流程图。

思考:如果参与排序的是n 个数呢?比较遍数与个数关系:遍数=个数-1【设计意图】遍数与个数关系算是其中一个难点,但无论是通过学生上台表演以及4个数的flash 动画演示,还是学生已有的认知规律,他们还是可以比较容易得出这个结论的。

所以将上面流程图中的“i<=3”改成“i<=n-1”即可得到下面左侧这个流程图。

为了分解后面一个难点,教师让学生用简单的语言描述每次“冒起一个最小数”是怎么冒出来的:不断两两比较交换,这也是冒泡排序也叫“比较交换”法的原因。

于是下面左侧流程图又可转化成右侧的形式。

流程图二(n 个数)i:记录正在执行的排序的遍数现在只剩下“不断两两比较交换”还需要进一步细化。

如何进行不断两两比较交换?以4个数为例,可以回看刚才的flash动画。

在程序中有些数据规律不是很明显,如果用表格来列一下,可以极大地提高数据分析的有效性和准确性,规律也更容易找出来。

第几遍依次与它的前一个数进行比较的第一个数依次与它的前一个数进行比较的最后一个数共比较次数第1遍d(4) d(2) 3第2遍d(4) d(3) 2第3遍d(4) d(4) 1 引导学生发现规律:每次都是从最后面一个数开始比较,最后一个参与比较的数的下标与比较的遍数有关:遍数+1思考:共n个数呢?让学生讨论共n个数,各遍比较的情况,特别是第i遍,完成下表的填写:第几遍依次与它的前一个数进行比较的第一个数依次与它的前一个数进行比较的最后一个数共比较次数第1遍d(n) d(2) (n-2)+1=n-1第2遍d(n) d(3) (n-3)+1=n-2 ……………………第i遍d(n) d(i+1) (n-(i+1))+1=n-i ……………………第n-1遍d(n) d(n) (n-n)+1=1 这里又需要用一个变量来标识正在参加比较的数组元素的下标,引进变量j:记录一遍处理过程中,当前数组元素下标。

小结论:共n个数,第i遍处理时,j的值从n到i+1之间递减,每次d(j)与它的前一个数d(j-1)进行比较。

【设计意图】本节课最大的难点就是变量j的取值范围,尤其是它的终值为什么是i+1学生往往更是难以理解,因为它是在动态变化的。

而由特殊的4位数开始找出规律,然后归纳推广到一般的n个数就相对比较简单。

我花了比较长的时间让学生自己探讨,目的是经过充分思考得出的结论才会记忆深刻。

为了加深他们的理解,我又用下表更直观地来说明这个问题。

我一边讲解,一边手绘了如下的表格,说明当要进行第i遍处理时,即要找第i个最小数时,此时前面i-1个最小数已经找到(阴影部分),这部分不需要再参与以后的两两比较,所以第i遍处理时,第一次两两比较应该是d(n)与它的前一个数d(n-1),以此类推,最后要比的是d(i+1)与它的前一个数d(i),至此此轮最小数就冒到第i个位置了。

所以最后一个的“它”的位置应该是i+1。

位置数组变量d1 2 … i-1 i i+1 … n“如果下面一个数比上面一个数小,就交换”。

如果…就…[否则…],其实是一种分支结构。

教师可以用生活中的实例说明(如果天气好的话就去打球;如果60分以上就显示合格,否则就显示不合格),并简单回顾一下分支结构的流程示意图。

【设计意图】程序实例生活化学生更容易接受。

流程图三(n 个数) 不断两两比较交换至此,所有问题、难点我们都全部细化,一一解决了,现在将流程图三“两两比较交换”纳入流程图二,即得下面的总流程图:总流程图说明:虚线框部分即为第i 遍处理时“不断两两比较交换”的流程图n:参加排序的数组元素总个数 i:记录正在执行的排序的遍数,由1变到n-1j:记录一遍处理过程中,当前数组元素下标,由n 变到i+1 最后一次两两比较第一次两两比较当刚显示这个总流程图时,学生还往往不太相信自己的眼睛。

师:不要惊讶,这的确是我们通过自己的努力一起画出来的。

看来设计算法画出流程图也并不是什么天大的难事,只要我们有信心,由浅入深还是可以解决的。

当然别忘了说明一下这个总流程图各部分的作用,并留1分钟让学生自己消化一下。

3.学生体验冒泡排序“算法执行过程”提供本书配套辅助软件“运行体验”文件夹中的“冒泡排序.swf”,让学生采用“单步执行”模式。

4.流程图→程序语言可以通过对两个变量和两数互换语句的解决,最终得到主要参考代码。

(1)i:记录正在执行的排序的遍数,由1变到n-1我们学过的循环语句不外乎for…next和Do…Loop两种,这里已知循环次数的情况下,用for…next比较简单。

for i=1 to n-1冒起一个最小数(循环体)next i(2)j:记录一遍处理过程中,当前数组元素下标,由n变到i+1for j=n to i+1 step –1d(j)与它的前一个数d(j-1)进行比较next j(3)d(j)与d(j-1)互换k=d(j):d(j)=d(j-1):d(j-1)=k教师可以利用酱油和米醋互换来做比喻,引导学生实现两数互换的方法。

相关文档
最新文档