C语言程序设计教学中排序算法的教学设计
——以选择法排序为例

2020-11-23 12:02羊巍孙新杰六盘水师范学院
数码世界 2020年11期
关键词:排序代码算法

羊巍 孙新杰 六盘水师范学院

一、引言

通常在选择法排序(以下简称排序)的教学中,教师可能会先演示排序算法的排序过程,讲解什么是排序,然后展示程序,并对程序中的代码进行讲解,可能还要对程序中的关键代码反复强调等等。其实对于一年级的程序新手而言,选择法排序算是一个比较难的复杂问题,他们常常是懂了选择法排序的算法原理,写不出程序,看了教师程序,关键代码搞不懂,课后还要花大量的时间反复琢磨才能搞懂。这样的教与学往往枯燥而又事倍功半,学生可能会失去学习兴趣,教师的教学目标也往往难以达成。

二、选择法排序的教学设计

教学设计是根据课程标准的要求和教学对象的特点,将教学诸要素有序安排,确定合适的教学方案的设想和计划。一般包括教学目标、教学重难点、教学方法、教学步骤与时间分配等环节。我校为地方二本学校,学生大都来自山区,多数学生没有计算机基础知识,经过一段时间的学习,分析问题并将其用程序实现的能力往往还是比较薄弱,鉴于此,进行排序教学设计时,根据实际情况,把排序算法分解成为几个子问题,分而治之,最后又进行合成,让学生从整体与细节上,比较好的掌握排序算法。

(一)教学目标

排序算法教学目标为:掌握排序算法(以排成一个非递减序列为例)的原理并能用C代码实现。

(二)教学重难点

排序算法教学重难点为:排序算法的原理,排序过程与程序中关键代码的对应关系。

(三)教学方法设计

结合多媒体手段讲解排序算法原理,学生可以理解算法原理,从教学的角度从发,分析一下排序算法源程代码结构,会发现其中有如下的难点:

(1)整个代码为一个双重循环,而且,内层循环次数执行受外层循环的控制。

(2)内层循环做两件事,一是扫描出指定范围内,序列中最大值的元素所对应的位置,而扫描的终点位置是递减的;二是元素对换,将上一步中得到最大值元素与扫描终点元素作对换,而对换中的三步操作虽然不一唯,但第一步操作确定后,后两步操作的顺序是唯一的。

针对上述分析,笔者认为,学生从理解排序算法原理,要一下实现排序算法,有比较大的难度。排序算法可以分解为二个子问题,一是扫描,二是对换,可以以函数的形式独立实现,作为课堂任务,引导学生完成,这样做有两个好处:一是让学生掌握扫描与对换的实现,二是作为知识衔接,进一步训练数组作为函数参数的函数这一知识点。在这个基础上,可以引导学生,以单循环的形式实现排序算法,即在循环中反复调用扫描与对换函数,这样做,可以避开双重循环。完成了这个课堂任务,学生可以理解,排序过程,就是反复的扫描与对换的过程,这就是分解问题的典型求解方法。行至于此,教师可以引导学生,完成最终形式的非函数调用的排序算法,在单循环中用非函数调用替换函数调用(子问题的合成),在这个过程,学生在函数调用的参数传递与多重循环两个知识点在能得到强化。

基于上述分析,笔者认为,排序算法的教学过程可以这样设计:教学方法采用以课堂任务驱动与引导探究为主的方法,通过几个课堂任务为驱动,1个算法原理展示为引导环节,逐步引导学生掌握排序的算法原理,引导学生逐步实现该算法,并深刻理解程序中的关键代码,同时,作为拓展,进一步引导学生用同样的分解方法实现冒泡排序算法。

(四)教学步骤

开始讲授时,不直接讲授排序,仅仅使用课堂任务驱动与教师演示进行探索引导。

课堂任务一:实现一个函数,其功能为:给定一个整数数组,找出从头至给定位置间,值最大的元素所在的数组下标。参考实现如下:

教学环节一:引导

教师引导学生观察排序算法图示,通过教师的引导,使学生理解并掌握算法的原理。引导学生总结:教师把排序问题分解为两个子问题:

(1)从序列的开始到指定位置,扫描序列,找出最大值元素所在的位置;

(2)将上一步中得到的位置上的元素,与序列中指定位置的元素进行对换。对于一个问题的规模为len的序列,反复做len-1次扫描与对换,可完成排序。至此,教师引导学生,利用已经实现的扫描与交换两个函数,可以完成课堂任务三。

课堂任务三:利用任务一和任务二find_max与swap两个函数,实现排序算法,功能为:给定一个长度为len整数序列,利用排序对该序列进行排序,使得该序列成为一个非递减的有序序列。参考实现如下:

课堂任务四:不调用find_max和swap函数,改写任务三的selection_sort函数,实现排序算法。该任务是将排序问题的子任务(扫描与对换)进行合成,形成最终的排序算法。参考实现如下:

教学环节二:小结

(1)排序问题被分解为几个子问题?

(2)每个子问题如何解决(教师强调关键代码)。

教学环节三:拓展:

(1)如果在每一趟排序中,要求扫描的终止位置不变,而起始位置可变,又怎么实现排序?

(2)要求学生研究冒泡排序,分解该问题,进而自行实现该算法。

三、小结

至此,笔者通过四个课堂任务,一个引导环节及一个小结,完整清晰、循序渐进、由浅入深的完成了教学任务。其中课堂任务一和课堂任务二将排序问题中扫描与交换分开实现,这种分解使得问题被简化,同时,在讲解排序问题前实现扫描与交换,降低了学生实现完整程序的难度。通过引导环节,使学生通过图示,清晰明了的理解排序算法的原理。通过课堂任务三,利用函数调用的方式实现算法,避免学生陷入扫描与交换的代码细节,使得算法实现简单清晰,同时,在技术细节上,强调每一趟扫描的终止位置如何控制,扫描完成后,如何指定元素交换的位置。通上述教学环节,学生可以平滑的进行到课堂任务四,实现一个最终的排序算法。最后利用教学环节六用为拓展,强化本堂课的教学内容。

猜你喜欢
排序代码算法
哪种算法简便
作者简介
恐怖排序
Travellng thg World Full—time for Rree
节日排序
进位加法的两种算法
根据问题 确定算法
神秘的代码
一周机构净增(减)仓股前20名
一行代码玩完19亿元卫星