手机站

当前位置: > 新闻资讯 > 最新录用 >

“排序算法”教学中常见的问题及教学策略

作者: 时间:2012-02-07 阅读:( )

在教育研究和实践过程中,教学策略已经越来越引起人们的重视,教师在教学策略方面素质的优劣,一定程度上决定着教师解决教学问题能力的高低,并最终影响到学生的学习效果。本文以“排序算法”教学为例归纳教学活动中常存在的比较突出问题,并就教学经验和教学理论为解决此问题而采用的教学策略进行论述。
关键字:教学策略    排序算法     数据结构   
在全国计算机二级等级考试的综合知识考核部分,常用算法特别是排序算法给大部分学生带来了难度,为此,我也展开了思考:如何让学生在较短的时间内对重要的知识留下印象;如何让学生分辨相似算法的区别;如何让学生对知识加以灵活应用。在教学活动中也经常会遇到各种各样的问题,不解决好这些问题,就会直接影响学生的学习效果。从教学活动的推进过程中归纳起来,问题主要集中体现在三个方面。
一.排序概念不清
排序是目的,完成排序的方法很多,各种不同排序方法的名称和含义经常让学生头晕脑胀。例如常见的排序方法有插入、选择、交换排序三大类,每一类又有好几种不同的排序方法,如冒泡排序、简单插入排序等。如果学生吃不透相关排序算法的概念,那排序的思路就是混乱的,不清晰的,后期的教学就无法继续,就不能将算法转化成相应的程序,更别说不同排序算法的优劣和使用环境了。
二.从排序算法到流程图的转换能力差
算法就是解决问题的思路、过程和方法,它可以非常明确的分解成一步一步,并最终用流程图等类似工具图形象描述出来。一般而言,流程图就是程序的前身。但由于我们学生,一是职高学生理论知识体系本来相对较差,理解起来更困难些;二是学生刚接触程序设计,对相关知识没有基础,所以学生在接受起来困难重重。教学中,普遍存在这种情况:学生明白某一排序算法的概念,并能用语言明确的描述算法,但不会借用流程图来表述,这就相当于排序算法学习的链条上断了一节。
三.学生灵活运用能力欠缺
虽然经过举一反三,学生明白了几种常用算法的排序思路,知道它们的区别,但大部分同学仍然只有单边能力:明确算法→相应流程图→相应程序,而反向的能力不具备。一旦涉及先给出程序,反方向走学习过程,就又会学习困难。例如程序填空题型,给出一段排序程序代码,空出几句关键语句,许多学同就会晕头转向了。学生们无法从程序代码细小的差异处找出问题解决的关键,这种对知识灵活运用的能力,是学生所欠缺的,也是课堂教学中需要培养学生养成的能力。
为了解决“排序算法”课堂教学中的这些问题,我在自己后来的课堂中进行了相应的设置,使用恰当的教学策略,让问题迎刃而解。
一.为突出几个概念,使用比较分析法教学
概念是学生理解排序算法的基础,概念是否清晰是进一步学习的前提。在“排序算法”教学中,应该重点突出几个概念,如常用排序算法的算法描述、排序算法的稳定性等。以排序算法的稳定性为例,在讲解这个概念时,先给出书本概念:
排序算法的稳定性:若待排序的序列中,存在多个具有相同关键字的记录,经过排序,这些记录的相对次序保持不变,则称该算法是稳定的;若经排序后,记录的相对次序发生了改变,则称该算法是不稳定的。
询问学生能明白这个概念所描述的意思吗?大家都摇头,少数几个皱着眉在思考。接下来我给出一个实例:
待排序的序列为:(49,38,65,97,76,13,27,49
排序后的序列1:(13,27,38,49,49,65,76,97)
排序后的序列2:(13,27,38,49,49,65,76,97)
请同学们比较排序后两个序列的区别,并参照排序算法稳定性的概念进行分析,由学生得出哪种是稳定的,哪种是不稳定的,学习效果非常好。经过课堂上这番推进后,学生很快就理解了“排序算法的稳定性”概念。之后,我又提出课后思考,排序算法考虑它的稳定性有何实际意义,哪位同学能在现实生活中找到它的应用。大家都会费尽心思去想,相互之间会热烈讨论,同时也找到了一些现实中具体的应用,比如,网上答题积分,当积分相同的时候,肯定是先提交的人优先,这里稳定的排序算法就非常重要了。经过这番教学和引导,这个概念就很难忘记了。
二.排序过程形象化,让学生易于理解
冲出概念迷雾后,进入到了排序算法的实际教学过程中,这个环节是教学环节的重点和难点。传统课堂教学中,老师大多是黑板上列几个数的随机序列,然后根据不同排序算法思路,一趟一趟写出排序结果。而这样上课的效果往往是学生不以为然,事后了解,好多学生都在下面想:这个排序如此简单,一看便知,有必要搞得这么复杂吗?这一趟一趟到底是在干什么呀?问号一个接一个。
如果能把排序的过程形象化,效果却大不一样。我的办法也很简单,就是由学生亲自参与排序过程。以插入排序、选择排序和冒泡排序三种排序算法为例,采用形象化教学的演示方法。
理论上,插入排序、选择排序和冒泡排序的思路和方法如下:
 
插入排序
选择排序
冒泡排序
算法描述
每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
示例
[初始关键字]
   [49] 38 65 97 76 13 27 49
J=1(49) [49] 38 65 97 76 13 27 49
J=2(38) [38 49] 65 97 76 13 27 49
J=3(65) [38 49 65] 97 76 13 27 49
J=4(97) [38 49 65 97] 76 13 27 49
J=5(76) [38 49 65 76 97] 13 27 49
J=6(13) [13 38 49 65 76 97] 27 49
J=7(27) [13 27 38 49 65 76 97] 49
J=8(49) [13 27 38 49 49 65 76 97]
[初始关键字]
[49 38 65 97 76 13 27 49]
J=1  13 [38 65 97 76 49 27 49]
J=2  13 27[65 97 76 49 38 49]
J=3  13 27 38 [97 76 49 65 49]
J=4  13 27 38 49 [49 97 65 76]
J=5  13 27 38 49 49 [97 65 76]
J=6  13 27 38 49 49 65 [76 97]
J=7  13 27 38 49 49 65 76 [ 97]
J=8  13 27 38 49 49 65 76 97
[初始关键字]
 [49 38 65 97 76 13 27 49]
I=1  38 49 65 76 13 27 49 97
I=2  38 49 65 13 27 49 76 97
I=3  38 49 13 27 49 65 76 97
I=4  38 13 27 49 49 65 76 97
I=5  13 27 38 49 49 65 76 97
I=6  13 27 38 49 49 65 76 97
稳定性
稳定
不稳定
稳定
时间复杂度
O(n2)
O(n2)
O(n2)
如果仅以这样的描述来讲解这三种排序算法,大多数学生都会有很多疑问,究其原因,我发现是学生没有真正投入到排序的过程中来。为此,我做了这样的设置,将给出的8个数分别写在一张张卡片上,交给第一组的同学,身高最高的拿最大数,最矮的拿最小数,依此规则每位同学分得一个数字。8位同学按待排原序列在教室前排列好。然后,请第二小组的同学按插入排序算法的思路对教室前的8位同学进行排序,另两组检查排序过程是否出错,并进行记录,错一次得一个“哭脸”。同样,第三小组完成选择排序算法,第四小组完成冒泡排序算法。
课堂如此设计,上课效果非常好。课堂上少了沉闷多了活力;少了老师的说教,多了同学的思考;少了数字的枯燥,多了同学们的笑脸。同样是对三种排序算法的讲解,花去的学习时间差不多,但最后的学习效果却完全不同。下课后,同学们依然还沉浸在这个排序游戏中,可见,调动了学生,学习也不在是件难事。当然,此类方法在课堂上应用时,一定要把握好度,不能没了课堂纪律,乱哄哄吵成一团,如果是这样,不仅不能事半功倍,反而连起码的教学目标也无法达到。
三.学习评价多样化,培养学生的创新能力
如何对学生的学习进行评价是一门学问,老师对学生学习过程的评价很大程序上决定着学生下一次的学习表现。对于“排序算法”的课堂评价,不能仅局限于学生是否能完整地写出程序这个最终目标,而是要看学生在课堂上的参与兴趣、思维活跃度等各个方面,以鼓励、激励为主,激发学生的创新精神,进而提升他们在今后学习中的热情,这种热情终将转换为编程的能力。
教学中总会有这样或那样的问题,只要善于发现问题并找出合适的方法解决这些问题,师生就会共同进步。
?

上一篇:高中英语教学中的情感教育

下一篇:关于中学数学素质教育的思考

相关文章
精品推荐
精品推荐

评论列表