C语言中冒泡排序算法教学设计
排序是计算机科学中一项重要的技术,其应用范围广、使用频率高,因此对于排序算法的研究一直是计算机专家的重点。高校的程序设计类课程也将排序算法作为重难点进行教学。
1常见的几种排序算法
1.1算法的基本概念
算法(Algorithm)是指解题方案的准确而完整的描述,是一组解决问题的指令集合,按照一定的语法规则输入,在有限时间内获得所要求的输出。简单说就是计算机的解题过程。算法具备以下几个特征:有穷性,一个算法的执行次数必须是有限的;确切性,算法的中的语句都应该具有确切的语义;输入,算法可以有0个或多个输入,给运算对象赋初值;输出,算法应该有一个或多个输出,显示算法的运行结果;可行性,算法的设计在原则上是可行的。
1.2排序算法的简述
常见的几种排序算法有:冒泡排序、选择排序、快速排序、计数排序以及托普排序等。冒泡排序(BubbleSort),是最简单的排序方法,其基本思想是:将要排序的元素看成是一组竖排的“气泡”,较小的元素较轻,往上浮,通过若干次对这个“气泡”序列的处理,让最轻的浮到最上面,次轻的次之,依次完成排序。按照一般的教学方法,老师会先向学生讲解冒泡排序的基本思想和相应代码然后再执行。这种方式学生理解和掌握起来比较困难,也无法调动学生的学习积极性,更无法使学生灵活运用。因此,要设计出一个合理、高效的教学过程,调动学生的学习积极性,拓展学生的自主思维能力,使学生掌握冒泡排序算法的思想及其编程方法,并运用到解决实际问题当中。
2教学过程设计
2.1利用多媒体动态分解排序步骤
通过多媒体软件将排序过程设计为动态效果,演示数据序列的交换过程。相邻数据进行比较,大数下沉、小数上浮。这样能直观地展现冒泡序的过程,提高学生的学习兴趣。
2.2排序过程动态解析
下面通过实例来说明冒泡排序的过程,设计排序的数据序列为:5,7,3,0,6五个数,进行升序排列,其过程分析如下。第一趟排序:先让最上面相邻两个数字进行比较,如果上面的数大于后面的数,就交换两者的位置,再将交换后的数依次与后面的数进行比较,经过4次这样的比较,就可以让最大的数“沉底”。第二趟排序:对剩下的4个数字,再进行两两比较,同前面过程一样,经过3次比较,第二大的数就排到了倒数第二个位置。第三趟排序:对剩下的3个数,再进行两两比较,同前面过程一样,经过2次比较,第三大的数排到了倒数第三个位置。第四趟排序:对剩下的2个数进行两两比较,过程同上,经过1次比较,第四大的数排到了倒数第四个位置。从而完成的本次排序。
2.3给出代码与分析
根据前面对排序过程的分析可知,如有n个数要进行排序,则可总结出以下步骤:排序的趟数为n-1;相邻两数从前往后比;每趟比较n-1-i次;大小不对就交换。按照总结的步骤给出完成相应功能的代码,学生接受和理解起来更加容易。其主要代码如下:1For(i=0;i<n;i++)/*排序的趟数为n-1*/2{For(j=0;j<n-1-i;j++)/*相邻两数从前往后比,每趟比较n-1-i次*/3If(a[j]>a[j+1])/*大小不对就交换*/4{temp=a[j];5a[j]>a[j+1];6a[j+1]=temp;7}8}通过教学实践证明,冒泡排序的思想容易理解,学生在将其转换为程序言时较难,通过将排序过程作以上步骤总结后,学生在写程序时只需安排步骤进行代码编写,简单易行。再让学生自己举例,分析程序的执行过程,验证冒泡排序的思想和代码的正确性。
2.4引导学生发现问题,改进算法
在教学中让学生跟着老师的思路理解并掌握知识点很重要,但同时引导学生发现算法设计中存在的问题或者不完善的地方,由此探索解决办法,也是教学的一个重要目的。观察分析排序过程的表1可发现,最后两趟的数据顺序是一致的,也就是说倒数第二趟排序就已经排序完成了,最后一趟排序过程是多余的。由此可见,不管初始数据序列如何,根据上面的算法设计都要进行n-1趟排序,而在实际序列中,可能在少于n-1趟的排序中就已经变成了有序序列,完成了排序,后面的循环就没有必要了。这时老师可给出一个常规的改进算法:设置一个标志变量flag,如flag=1,表示有交换;flag=0,表示无交换。即是当flag=0时就结束循环,提高排序效率。具体做法是:在上述程序第1行下插入语句“flag=0;”,第6行下插入语句“flag=1;”,第7行下插入语句“if(flag==0)break;”。这样在程序的内层循环中不再有值的变化时就可以跳出循环,结束程序,从而提高算法的效率。现代教育着重对学生创造性思维的培养,相对于知识的讲授更重要的是让学生掌握思维方式,发散思维就是创造性思维中的一种重要形式。通过上面的讲解让学生知道冒泡算法还有其不完善的地方,可进一步启发学生对算法进行改进:如上浮下沉算法、快速排序算法、线性时间算法等。使学生能更快更好掌握排序算法的基本思想和原理,着重培养学生发现问题和解决问题的能力,激发学生的独立思考和创新能力,这比将固化的知识点传授给学生更加的重要和有效。
3结语
本文以讲授冒泡排序为例,设计了通过动态的PPT和增加动画效果等多媒体教学手段,采用正向讲解算法思想,逆向分析具体实例,归纳、总结算法的多种思维方法,形象生动的向学生展示了冒泡排序的基本思想和变化过程。一方面通过步骤的总结过度到代码的书写,突破代码书写的难点。另一方面引导学生观察算法的不足之处,让学生自己发现问题,并提出解决问题的办法,进而培养学生的发散思维和独立思考的能力,体现了现代教育着重培养学生创新能力的教育思想。
作者:杨波 梁少林 单位:四川文理学院数学与财经学院