第一篇:冒泡排序法教案
数据结构——冒泡排序(第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
第二篇:冒泡排序教案
冒泡排序
信息技术 吕红波
教学内容分析
教材是教育科学出版社《算法与程序设计》,内容为第三章第四节第一部分《冒泡法排序算法》。排序算法是使用频率最高的算法之一,而冒泡排序是其中一种很典型而且相对简单的方法,这部分内容重点在于介绍冒泡排序的原理以及如何用程序实现冒泡排序算法,要求学生理解冒泡排序的过程的同时,能够运用冒泡排序算法解决实际问题。
教学对象分析
通过前面的学习,学生已经了解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.完成本节课学习任务后,学生根据教学目标完成自我评价。
教学反思
本节课内容理论性比较强,通过多种方式来向学生呈现冒泡排序的过程,通过类比的方式让学生了解冒泡排序,通过一段有创意的舞蹈来进一步让学生了解冒泡排序的过程,避免了理论知识的枯燥,防止学生课内思维疲劳,让学生乐于去接受。最后通过一个简单的游戏让学生学以致用,来解决实际问题。通过教师的归纳总结让学生正确的看待冒泡排序算法。
第三篇:冒泡排序说课稿
冒泡排序说课稿
各位评委大家好,很高兴能给我十分钟的时间和大家交流。我叫周芮,来自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);} } 岗位排序法、岗位分类法、因素比较法、要素计点法等岗位评价的方法各有特色,并不存在最佳方案 1.岗位评价法的种类 岗位排序法、岗位分类法、因素比较法、要素计点法 2.岗位评价法之一:岗位排序法 岗位排序法是目前国内外广泛应用的一种岗位评价方法,这种方法是一种整体性的岗位评价方法。岗位排序法是根据一些特定的标准例如工作的复杂程度、对组织的贡献大小等对各个岗位的相对价值进行整体的比较,进而将岗位按照相对价值的高低排列出一个次序的岗位评价方法。 排序时基本采用两种做法。 一、直接排序,即按照岗位的说明根据排序标准从高到低或从低到高进行排序。 二、交替排序法,即先从所需排序的岗位中选出相对价值最高的排在第一位,在选出相对价值最低的排在倒数第一位,然后再从剩下的岗位中选出相对价值最高的排在第二位,接下去再选出剩下的岗位中相对价值最低的排在倒数第二位,依此类推。 岗位排序法的主要优点是简单、容易操作、省时省力,适用于较小规模、岗位数量较少、新设立岗位较多,评价这对岗位了解不是很充分的情况。但是这种方法也有一些不完善之处,首先这种方法带有一些主观性,评价者多依据自己对岗位的主观感觉进行排序;其次,对岗位进行排序无法准确得知岗位之间的相对价值关系。 3.岗位评价法之二:岗位分类法 所谓岗位分类法,就是通过制定出一套岗位级别标准,将岗位与标准进行比较,并归到各个级别中去。岗位分类法好像一个有很多层次的书架,每一层都代表着一个等级,比如说把最贵的书放到最上面一层,最便宜的书放到最下面一层,而每个岗位则好像是一本书,我们的目标是将这些书分配到书架的各个层次上去,这样的结果我们就可以看到不同价值的岗位分布情况。因此,首先我们需要建立一个很好的书架,也就是岗位级别的标准。如果这个标准建立的不合理,那么就可能会出现书架中有的层次挤满了很多书,而有的层次则没有书,这样挤在一起的书就很难区分出来。 岗位分类法的关键是建立一个岗位级别体系。建立岗位级别体系包括确定等级的数量和为每一个等级建立定义与描述。等级的数量没有什么固定的规定,只要根据需设定,便于操作并能有效的区分岗位即可。对每一定等级的定义和描述要依据一定的要素进行,这些要素可以根据组织的需要来选定。最后就是要将组织中的各个岗位归到合适的级别中去。 岗位分类法是一种简便易理解和操作的岗位评价方法。适用于大型组织,对大量的岗位进行评价。同时这种方法的灵活性较强,在组织中岗位发生变化的情况,可以迅速的将组织中新出现的岗位归类到合适的类别中去。 但是,这种方法也有一定的不足,那就是对岗位等级的划分和界定存在一定的难度,有一定的主观性。如果岗位级别划分的不合理,将会影响对全部岗位的评价。另外,这种方法对岗位的评价也是比较粗糙的,只能得出一个岗位归在哪个等级中,到底岗位之间的价值的量化关系是怎样的也不是很清楚,因此在用到薪酬体系中时会遇到一定的困难。同时岗位分类法适用性有点局限,即适合岗位性质大致类似,可以进行 明确的分组,并且改变工作内容的可能性不大的岗位。 4.岗位评价法之三:因素比较法 因素比较法是一种量化的岗位评价方法,它实际上是对岗位排序法的一种改进。这种方法与岗位排序法的主要区别是:岗位排序法是从整体的角度对岗位进行比较和排序,而因素比较法则是选择多种报酬因素,按照各种因素分别进行排序。 分析基准岗位,找出一系列共同的报酬因素。这些报酬因素是应该能够体现出岗位之间的本质区别的一些因素,例如责任、工作的复杂程度、工作压力水平、工作所需的教育水平和工作经验等。将每个基准岗位的工资或所赋予的分值分配到相应的报酬因素上。 因素比较法的一个突出优点就是可以根据在各个报酬因素上得到的评价结果计算出一个具体的报酬金额,这样可以更加精确的反映出岗位之间的相对价值关系。一般在下列条件下因素比较法较为适用:需要一种量化方法,愿花大量的费用引入一种岗位评价体系;这种复杂方法的运用不会产生理解问题或雇员的接受问题,并且希望把工资结构和基准岗位的相对等级或劳动力市场上通行的工资更紧密联系起来。 应用因素比较法时,应该注意两个问题:一个是薪酬因素的确定要比较慎重,一定要选择最能代表岗位间差异的因素;第二个问题是由于市场上的工资水平经常发生变化,因此要及时调整基准岗位的工资水平。但是由于我国处于经济体制的转轨时期,多种薪酬体制并存;同时国内薪酬体制透明度较低,劳动力市场价格处于混沌状态,因而使用因素比较法的基础数据不足。目前因素比较法在国内基本未得到使用。 5.岗位评价法之四:要素计点法 要素计点,就是选取若干关键性的薪酬因素,并对每个因素的不同水平进行界定,同时给各个水平赋予一定的分值,这个分值也称作是“点数”,然后按照这些关键的薪酬因素对岗位进行评价,得到每个岗位的总点数,以此决定岗位的薪酬水平。要素计点法首先选择薪酬要素,并将这些薪酬要素建立起一个结构化的量表。专家委员会根据这个评定量表对岗位在各个要素上进行评价,得出岗位在各个要素上的分值,并汇总成总的点数,再根据总点数处在哪个岗位级别的点数区间内,确定岗位的级别。要素计点法主要的缺点是操作过程较为复杂,而且提前要与员工进行充分的沟通,以对要素理解达成共识。 要素计点法在下述情况下可能是最合适的:工作岗位资料稳定、清晰、完整,工资决策需要明确无误,是采用量化方法所费额外成本物有所值;而排列大量的极不相同的工作岗位的需要使考虑运用一系列通用因素成为必然。第四篇:冒泡排序及选择排序Java实现心得
第五篇:岗位排序法