第一篇:冒泡排序教案
冒泡排序
信息技术 吕红波
教学内容分析
教材是教育科学出版社《算法与程序设计》,内容为第三章第四节第一部分《冒泡法排序算法》。排序算法是使用频率最高的算法之一,而冒泡排序是其中一种很典型而且相对简单的方法,这部分内容重点在于介绍冒泡排序的原理以及如何用程序实现冒泡排序算法,要求学生理解冒泡排序的过程的同时,能够运用冒泡排序算法解决实际问题。
教学对象分析
通过前面的学习,学生已经了解vb算法设计的基本知识,学会利用自然语言和流程图描述解决问题的算法,对排序中循环语句以及数组变量的使用方法都有了一定的基础。但由于程序设计思想比较弱,在实际生活中往往忽视运用排序算法来处理实际问题,这就要求学生通过本节课的学习,学会运用冒泡排序算法来处理实际问题,并为以后学习其它排序算法打下基础。
教学目标
1.知识与技能:
掌握冒泡排序的原理
理解冒泡排序的主要代码 2.过程与方法:
能够有效使用冒泡排序思想设计解决简单的排序问题 3.情感、态度与价值观:
提升分析问题、发现规律的能力 形成对排序算法探索的强烈愿望
教学重点、难点
教学重点:冒泡排序的过程和原理
教学难点:冒泡排序主程序代码的实现
教学方法
讲授法、活动型教学法、任务驱动教学法 教学过程
1.创设情景、激发兴趣
教师活动:出示2011-2012赛季NBA部分球员数据统计表。
提问:想知道谁的得分最高,谁的罚球最好,用什么方法? 学生活动:学生思考问题,给出可能性答案:excel排序和用程序设计实现。
2.图文并茂、理解过程
教师活动:运用程序设计中的冒泡排序算法可以实现。展示图片,讲解冒泡排序“冒泡”由来。
ppt展示任务:运用冒泡排序法将10,2,6,7,4从小到大进行排列。
结合ppt对冒泡排序实现过程进行讲解。
学生活动:结合教师讲解和ppt内容,理解冒泡排序原理。教师活动:播放一段关于冒泡排序的视频。
3.结合过程、书写代码
教师活动:讲解冒泡排序主程序部分,书写伪代码。学生活动:理解主程序。
4.总结归纳、学以致用
教师活动:组织学生开展活动:随机抽选五位男生、五位女生,按性别分组,用布遮住自己的眼睛,每组随机排成一队,要求队伍从左到右由高到矮排列,看哪组所用时间短。
提示:摸对方的头顶和自己比较的方式,结合冒泡排序来 完成。
归纳总结:什么是冒泡法排序?
在排序过程中,使小的数就像气泡一样逐层上浮,而使大的数逐个下沉。
拓展延伸:冒泡排序有不足之处。排序算法包括很多:插入排序、选择排序、快速排序、希尔排序等。
板书设计
冒泡法排序Visual Basic伪代码: For i=1 to 4
For j= 1 TO 5-i
If a(j)>a(j+1)THEN
交换a(j)和a(j+1)的值
End if
Next j Next i 学习效果评价
1.在教学实践过程中对学生操作效果和结论的及时反馈评价。2.完成本节课学习任务后,学生根据教学目标完成自我评价。
教学反思
本节课内容理论性比较强,通过多种方式来向学生呈现冒泡排序的过程,通过类比的方式让学生了解冒泡排序,通过一段有创意的舞蹈来进一步让学生了解冒泡排序的过程,避免了理论知识的枯燥,防止学生课内思维疲劳,让学生乐于去接受。最后通过一个简单的游戏让学生学以致用,来解决实际问题。通过教师的归纳总结让学生正确的看待冒泡排序算法。
第二篇:冒泡排序法教案
数据结构——冒泡排序(第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]
从练习题中引出:一次冒泡排序的结果:使关键字最大的记录排在了序列的最后一个位置上。(这很重要,要强调)
比较后两题的题目区别和排序过程区别,作为课间思考题。(第二题是一组逆序数据,每一个排序都进行了数据交换,共进行了8-1=7次冒泡;第三题是一组正序数据,进行完一次排序后就发现,没有任何数据交换发生,后面进行的第二次到第七次冒泡的过程完全一样。)
三、第二小节
3、冒泡排序终止的条件(20分钟)
课堂思考题:考虑任何一组序列最多进行多少次冒泡排序就可保证顺序一定已经排好了。
思考:如果序列初始顺序是逆序,需要进行多少次排序(要记住,数据结构——冒泡排序(第19讲,第9章)
每次冒泡排序的结果:可以保证最大的记录在最后一个位置上)。如果序列初始顺序是正序,需要进行多少次排序就可以保证数据序列顺序。如何使排序过程适可而止?既排好序又不多余进行?
当计算机对一组数据进行排序之前,并不知道该组数据是什么顺序,因此,必须要进行至少一次的比较和排序,当某一比较和排序进行完之后发现没有任何数据交换发生,证明任何相邻的两数都符合目标顺序要求,因此,也不必再进行下一下比较排序了。
结论:当进行某次冒泡排序时,若没有任何两个记录交换位置,则表明序列已排好,此时排序可结束。
4、用文字(伪码)描述冒泡排序算法(15分钟)思考方法:
首先是对数组的相邻的两数比较,根据比较结果确定是否交换位置;这种比较进行的次数比数据列中数据个数少1;
(此两步完成了一次冒泡排序)
对一个序列来说,共进行多少次冒泡排序呢?最多和上面第二步的比较次数一样,但也可提前结束,只要在某一遍冒泡中没有发生数据交换即可。如何确实是否发生数据交换,在程序中,可以考虑设置一个标志位,当发生数据交换时,更改标志位,每次重新进行冒泡排序之前可以检查标志位,如果没有发生改变,则可证明上一次冒泡已经没有数据交换发生,也就是说数据序列已经排好,可以停止进行冒泡排序。
冒泡算法函数 { 设置标志位;
//以下循环用来控制冒泡排序进行的次数
数据结构——冒泡排序(第19讲,第9章)
for循环(对n个数据的序列进行n-1次冒泡,但是如果没有交换发生则跳出该循环){ //以下循环用来对该数据序列进行一次冒泡排序 for(单次冒泡排序需要进行n-1次){ 比较相邻两数的大小;
if(前大后小){ 交换 } else //前小后大 {
位置不变 } } } }
5、回顾总结冒泡排序的思想(10分钟)本节课:
1.首先回顾了什么是排序;
2.然后介绍了冒泡排序的思想;(每次冒一个泡泡,把最大的冒到最后)3.我们通过三道练习题对一组无序数据进行了排序;
4.通过练习题我们看出来,数据初始序列越接近目标序列,冒泡的次数越少;因此我们总结出了冒泡排序最多进行的次数和终止的条件; 5.最后,我们根据冒泡排序的思想用文字描述了冒泡函数的构成方法;
四、课后作业
1、用冒泡排序法对数字序列进行排序(要写出6次排序步骤)
55 48 37 10 90 84 答 55 48 37 10 60 84 90 48 37 10 55 60 84 90 37 10 48 55 60 84 90 10 37 48 55 60 84 90
数据结构——冒泡排序(第19讲,第9章)
10 37 48 55 60 84 90
2、用C语言描述冒泡排序算法。
Void BubbleSort(elemtype x[],int n)//传入序列和序列数字个数 {
int i,j,flag=1;elemtype
temp;for(i=1;i
第三篇:冒泡排序说课稿
冒泡排序说课稿
各位评委大家好,很高兴能给我十分钟的时间和大家交流。我叫周芮,来自09教技。今天我要说课的课题是《冒泡排序》。该课选自浙教版《算法与程序设计》。排序算法是本书中比较精彩但也是相对较难的部分之一,它的内容丰富,形式多样。而冒泡排序又是相对简单的一种排序方法。它是本章的第一课时,在本章中起着示范作用,所以讲好这节课是教好以后的课的关键。
综合以上几点,我将本课的教学目标制定如下: 知识与技能:
掌握冒泡排序的原理;
理解冒泡排序的流程图
过程与方法:
通过游戏中对人物财富的排序,理解冒泡排序的基
本原理和方法;
通过归纳冒泡排序算法来编写流程图
情感态度价值观:培养学生分析问题以及解决日常生活中实际问题的人能力,发现规律的能力。并激发学生主动学习的兴趣
基于对教材的理解,我将本堂课的重点定为掌握冒泡排序的算法,难点为归纳算法,用流程图表示。
我们现在面对的学生是所谓的90后,他们普遍具有创造性,容易接受新事物,善于发现的特点。他们对认知规律从感性逐步提升到了理性。而且学生有个普遍的特性就是爱玩,这是他们的天性。基于这一特点,我将会用游戏来引发他们的学习兴趣。在知识准备方面,学生
先前已经学过了算法的表示方法,三种基本结构,熟悉了变量的运用,能用算法描述一般问题的解决步骤。
在教法方面,我将选用演示法、任务驱动法、练习法。
在学法方面,主要是听讲法和自主探究学习法,通过老师讲解以及自己的亲身体验来探究算法的原理。
《师说》中提到,“师者,传到授业解惑也”,教学也就是为学生解决疑惑的。我的教学过程也就围绕“惑”这个字展开,我称之为“惑之四部曲”。
第一部曲是“遇惑”。我先创设一个游戏情境——大富翁,这是一款比较普遍的游戏,容易引起学生的共鸣,从而引发学生的学习兴趣。利用游戏中的一个情景——财富排行榜,来引出教学内容。首先我展示的排行榜上可能只有几个人,同学们能够很轻易地给出结果,可是当人数增多的时候,同学们就会觉得比较困难,当人数到达一定的数量后同学们会觉得这简直是不可能完成的任务。这样,老师就可以引出学习的内容——冒泡排序。
这一设计,我主要考虑到学生对数量少的数据能够比较容易地完成而不是通过考虑“按什么方法完成的”。这样增加难度后可以让学生体会到算法的好处,从而引起主动学习的兴趣,可以自然引出冒泡排序算法的思想。第二部曲是“析惑”。
为了让同学们脑海中模糊的思想变清晰,我准备了一个FLASH课件小游戏,内容就是大富翁的财富排行榜。我制定这么一个规则:将财富从少到多排列。可以通过从右往左的顺序两两进行对比,将较低的人往左排。
通过这样一个环节,可以让同学们比较直观的感受到冒泡算法的思想,是如何进行的。第三部曲是“解惑”
首先我会请同学用自然语言来描述算法的思想,我进行小结。接着我将继续提问如何用流程图表示。在这里我先会引入一个数组的概念,用板书演示。为了让同学更加透彻了解算法,我会用数组来演示详细的过程。用变量i表示趟值,用j表示带比较数组的位置。若d(j) 在课堂快结束时我将会进行课堂小结,回顾本堂课的知识点提问让同 学回答算法思想,达到巩固的目的。 最后一部曲是“扫惑”。我会给同学们布置一个任务,给出一张成绩单,上面印有一个同学的各科的考试成绩。让同学们用冒泡排序算法写出各趟排序结果并上交。这样可以及时检测同学们是否学会了。得到及时的反馈。 总结:因为这堂课相对而言是比较难的,如何长时间吸引学生的注意力是我要考虑的一个问题。为此,我进行了如下设计: 1、用游戏引入课堂,逐步加深问题的难度 2、用FLASH课件演示 3、用表格列举 4、请同学们补充流程图 /*选择排序*/ public class SelectSort2 { public static void sort(int[] tempArr){ for(int i =0;i { /* 当初错误认为此处与冒泡排序极为相像,甚至觉得选择排序与冒泡排序毫无差别,其实相反,冒泡循环意味着每一次 循环都会将相邻的两个数比较这样每次都会排出数组中最大或最小的数。然后再次执行外层循环,再继续进入内层循环 再依次进行比较。 选择排序则是,第一次循环:咬定第一个数角标i=0的元素,依次与后面的元素比较,将最小或最大的数排出来,再进入 外层的第二次循环,并且此时咬定的数为角标为1的元素,但因为之前已将全数组中最小或最大的数排出所以没有必要再 与数组中角标为零得数比较 而是通过 j=i+1 将待比较的角标变成[ 2、3、...、tempArr.length)。 */ for(int j =i+1;j { if(tempArr[i]>tempArr[j]) { int temp = tempArr[i]; tempArr[i] = tempArr[j]; tempArr[j] = temp; } } } } public static void arrPrint(int[] tempArr){ System.out.print(“[”); for(int i = 0;i { if(i!= tempArr.length-1) { System.out.print(tempArr[i]+“,”); } else { System.out.println(tempArr[i]+“]”); } } } public static void main(String args[]){ int[] arr = new int[]{10,2,-7,8,1,12,6,7,9,3};arrPrint(arr);sort(arr);arrPrint(arr);} } /*冒泡排序*/ public class MpSort2 { public static void sort(int[] tempArr){ for(int i = 0;i { for(int j = 0;j { if(tempArr[j]>tempArr[j+1]) { int temp = tempArr[j]; tempArr[j] = tempArr[j+1]; tempArr[j+1] = temp; } } } } public static void arrPrint(int[] tempArr){ System.out.print(“[”); for(int i = 0;i { if(i!= tempArr.length-1) { System.out.print(tempArr[i]+“,”); } else { System.out.println(tempArr[i]+“]”); } } } public static void main(String[] args){ int[] arr = new int[]{10,2,-7,8,1,12,6,7,9,3}; arrPrint(arr); sort(arr); arrPrint(arr);} } C语言程序设计冒泡排序教学案例 永川职业教育中心 杨进 【案例背景】 排序是计算机学科中一项复杂而重要的技术,在各种软件中使用频率都很高,因此专家们研究了各种排序算法。在中职类设计课程教学中,常以冒泡排序来讲解排序的原理,它简单,但过程繁琐,传统教学很难激发学生兴趣,学生不易理解,也很难编写掌握冒泡排序。因此,如何合理设计教学过程,让学生掌握冒泡排序的思想和编程方法,又能发散思维,扩充知识,进而激发学生对编程课程的兴趣,是一个关键问题。 1、学情分析 学生已学习了程序设计的三种结构,学习使用了数组。但在学习排序算法的过程中学生可能会对数组变量的变化在理解上存在一定困难,在排序算法中,对双重循环内外层的作用及有关循环参数的设置可能会产生一些不合理或是错误,需要通过实践的体验进行强化使用规范。 2、教学目标 知识目标:掌握冒泡排序的原理;能结合冒泡排序的原理看懂冒泡排序的主要代码;理解冒泡排序的流程图; 能力目标:学会使用冒泡排序思想设计解决简单排序问题的算法;进一步理解程序设计的基本方法,进一步体会算法与程序实现的关系; 情感目标:培养学生分析问题、发现规律的能力,激发学生学习热情;培养良好的读程习惯; 3、教学重点、难点 重点:冒泡排序算法的基本思想,双重循环应用 难点:双重循环程序的解读,冒泡排序算法实现后对程序的理解 4、教学策略与手段 以循序渐进、层层深入为教学的指导方针,采用讲解法、演示法、讨论合作、分析归纳法引导学生参与思考,由特殊到一般,有效地突出重点突破难点,逐步深化对冒泡算法、循环思想和执行过程的理解。 1 5、课前准备 PPT课件、冒泡排序的视频文件。【案例描述】 师:在前面的学习中,我们学过了用EXCEL进行一些简单的数据处理方法,请同学们说说看你是怎么对同学的成绩排次序的? 生:先选好数后,点排序就行了。 师:是的。只要用EXCEL的排序功能就可以了,点点鼠标就能完成。在前面的学习中,我们已经解开了很多单击鼠标就可以完成某一个任务的秘密,今天我们就来探访一下排序的秘密。 师:先让我们来做个舞蹈视频,同时要求同学们谈谈看后的自己的想法。并要请几位同学模拟示范。 这段真人编排的排序算法的舞蹈视频,非常生动有趣,能充分吸引学生的眼球,极大激发了学生的兴趣。 播放完毕,老师提问:请同学们说说你们看到了什么? 生:议论并说自己的想法。(冒泡排序的过程) 由于视频播放相对较快,为了让学生更好理解与参与,老师还根据具体情况请了四位涌跃分子来作下一个游戏。 请四位同学从前到后坐好并拿好老师给你们的数字,然后从后面开始两个两个比较你们手中的数,如果后面的同学数小的话就和前面的同学换一下座位,直到拿到最小数的同学坐在第一个位子为止。 现在开始,请其他同学注意观察。请同学们说说你们看到了什么? 生:议论并说自己的想法 师:我听到了同学们的发言了,你们都看到了最小数已经在最前面了,并且是经过了3次的比较。想一想,如果要让拿第二小的数的同学坐上第二个座位,还要进行几次的比较呢?(注意只能从后开始两两比较)请拿数的同学演示一下。几次? 生:两次 师:对了,是两次,比第一次少了一次。请四位同学回到座位。刚才我们通过四位 2 同学的演示其实给我们展示了一种数据排序的方法---冒泡法。那么什么是冒泡排序法呢? 冒泡排序法:是指把n个要排序的数看成一垂直列,从最下面的数开始两两比较相邻的两个数,把小的数向上换,经过n-1次处理以达到排序目的的一种排序方法。(课件展示) 分析总结学生的演示:(课件展示)第1次冒泡排序时 j 从 4 开始到2: 第2次冒泡排序时 j 从 4 开始到3: 第3次冒泡排序时 j 从 4 开始到4 如果用伪代码可表示为: 第1次冒泡排序时 j 从 4 开始到2: for(j=4;j>=2 ,j--)if(d[j] 3 for(j=4;j>=3 ,j--)if(d[j] 问:如果我们用一个变i(值分别为1,2,3)来记录冒泡的次数,请问能否将上述的三次代码合并成一段通用的代码呢? 生:能(学生讲伪代码)for(j= 4,j>=i+1,j--)if(d[j] 归纳分析引入核心代码: 当i=1到3时:(课件展示)for(j= 4;j>=i+1;j--)if(d[j] 那么,我们用我们学过的循环语句就可以把某一次的比较表示为:(课件展示)for(j= 4;j>=i+1;j--)if(d[j] 生:思考 师:其实,我们可以在刚才的循环外再加一层循环,使i也参与变化,以达到对次数的控制(课件展示) for(i=1;i<4;i++)for(j=4;j>= i+1;j--)if(d[j] 刚才我们已经讲解了4个数冒泡排序的代码,那么有n个数呢?(课件展示)for(i=1;i 4 for(j=n;j>= i+1;j--)if(d[j] 分析冒泡排序的源程序(用tc编辑器演示分析)为了进一步检验学生的情况,老师作了问题延伸: 编写一个评分系统的代码段:有10个评委,最后得分为去掉一个最高分与一个最低分后的平均分。(提示:排序后要将最小和最大的数去除,再累加其余各数并除以8)。 【案例反思】 1、本课时采用通过对冒泡排序的基本方法进行分析,利用视频、游戏等多种教学手段,采用正向讲解算法思想,总结规律,归纳算法等方法,一方面使学生顺利从排序的思想过渡到伪代码并到代码的书写,逐步引出双循环和冒泡排序的程序实现,另一方面培养学生观察算法,分析算法和使用算法的双向思维意识和发散思维能力,提高学生自觉能力和独立思考能力,体现了在课程教学中培养学生综合素质的教育思想。 2、老师要注意讲授时间,要能及时调节课堂气氛,防止学生课内思维疲劳。 5第四篇:冒泡排序及选择排序Java实现心得
第五篇:C语言程序设计冒泡排序教学案例 杨进