APP下载

选择排序算法教学设计

2018-09-25白洪涛何丽莉孙良凤金龙海

教育教学论坛 2018年35期
关键词:数据结构教学过程C语言

白洪涛 何丽莉 孙良凤 金龙海

摘要:针对非计算机专业学生算法学习和程序实现所面临的困难,采用分阶段、逐步递进的思路对选择排序方法进行了介绍,将选择排序分解为在序列中寻找最值和元素交换两个步骤,提供了选择排序算法的C语言实现。

关键词:选择排序;数据结构;教学过程;C语言

中图分类号:G642 文献标志码:A 文章编号:1674-9324(2018)35-0196-02

一、引言

为了更好地使初学者掌握排序算法,广大计算机教学工作者研究了多种有效的教学手段,如:谢翠萍等结合双向思维法,口诀教学法的教学过程设计,使学生更好得掌握冒泡排序算法,培养学生的发散思维能力[1];马秀荣阐述了选择法排序的过程,侧重使学生理解数组的定义、数组元素的引用以及数组下标和数组元素之间一对一的关系[2]。为了算法的过程更直观,学生更容易理解,文献[3]借助现代多媒体技术手段设计了基于Flash和其他动画等的排序过程和结果演示,并取得了不错的教学效果。本文在非计算机专业《C语言程序设计基础》课程教学过程中设计了先“打擂台”再“排序”的递进式选择排序教学过程,并分析了学生典型的两种现实错误。

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

1.算法思想。选择排序是一种直观的排序算法,它的工作原理如下(以升序为例):首先在未排序序列中找到最小元素,存放到该序列的第一个位置,即第一个位置的元素与该序列中最小元素交换,然后再从剩余未排序元素中继续寻找最小元素,放到第二个位置(交换)。以此类推,直到所有元素均排序完毕。我们以一个6个整型数据实例进行讲解:有21、25、67、89、32、19未排序序列,要求将它们使用选择排序方法进行升序排序。

如图1所示,用向下的箭头指向未排序序列中的第一個数,用向上的箭头指向该序列的最小数,这两个数进行交换便完成了一趟排序。整个序列分成两个部分:已排序部分(中括号外)和未排序部分(中括号内),每一趟排序使得整个序列中的一个数“就位”,这样若序列的长度为n,则需要n-1趟交换,即可完成整个序列的排序。

2.算法实现。通过上述算法分析和实例讲解,可以将选择排序过程具体化为两个步骤:(1)在一个特定(未排序)序列中找出最小值(最大值);(2)用该数和未排序序列中的第一个数进行交换。如此,把选择排序转换成在序列中找最值和元素的交换问题。其中,找最值可以使用打擂台的算法,给出选出序列最小值及其位置的C语言程序如下:

#include

int main()

{

int i,a[6];

int min,loc;

printf("please input 6 integer numbers:\n");

for ( i=0;i<6;i++ )

scanf("%d",&a;[i]);

min = a[0];

loc = 0;

for( i=1;i<6;i++ )

if ( min > a[i] )

{

min = a[i];

loc = i;

}

printf("the min of array is %d,loc is %d\n",min,loc);

return 0;

}

在打擂台算法的基础上,我们再补充元素交换,即将最小值a[loc]与a[0]进行交换:

t = a[0];

a[0] = a[loc];

a[loc] = t;

如此,我们再将趟数的外层循环作用在如上程序块上,a[0]中的0变成外层循环控制变量j,内层循环从j+1(未排序序列)开始,这样选择排序的整体算法便不难了(只给出关键程序段)。

for ( j=0;j<5;j++ ) //控制循环的趟数 n-1

{

min = a[j];

loc = j;

for ( i=j+1;i<6;i++ ) //在未排序序列中选最小a[loc]

if ( min > a[i] )

{

min = a[i];

loc = i;

}

//a[loc]与a[j]交换

t = a[j];

a[j] = a[loc];

a[loc]=t;

}

当然,求最小值时可以不用min变量存放,直接使用a[loc]即可。

参考文献:

[1]谢翠萍,陈家益,朱兵章.C语言中冒泡排序教学设计与分析[J].福建电脑,2013,(5):50-51.

[2]马秀荣.《C程序设计》中选择法排序教学方法的探讨[J].佳木斯教育学院学报,2010,(1):115-116.

[3]邱秀荣,赵莉苹,蔡镔.基于Flash的冒泡排序算法的演示实现[J].安阳工学院学报,2011,10(6):48-50.

猜你喜欢

数据结构教学过程C语言
基于Visual Studio Code的C语言程序设计实践教学探索
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
欣赏教育在中学化学教学中的实施
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
论子函数在C语言数据格式输出中的应用
TRIZ理论在“数据结构”多媒体教学中的应用
《数据结构》教学方法创新探讨