算法演示程序(精选7篇)
算法演示程序 篇1
1 引言
排序是计算机程序设计中一项基本的操作, 在实际应用中, 有很多情况下需要对数据按照某种方式进行排序后才能达到某种要求, 因此, 学习和研究各种排序方法是计算机工作者的重要课题之一。
比较成熟的排序算法有很多, 比如冒泡排序、选择排序、插入排序、快速排序等, 利用这些排序算法都能够使一组数据序列按照某个关键字排成需要的顺序。但这些经典的排序算法在对数据序列排序时, 都要改变数据的原始顺序。也就是说, 在一般情况下, 排序问题的输入是n个数a1, a2, a3, ……, an的一个序列, 排序是按照某个关键字对初始序列重新排序, 产生初始输入序列一个重新排列:a11, a21, a31, ……, an1, 使得a11
2 按学生成绩排名次的算法
假设要处理的数据存放在A数组中, 为了算法实现的需要, 定义A数组为A[2][n], 其中A[0][0..n-1]存放需要确定名次的数据, A[1][0..n-1]存放排序后各数据对应的名次, A[2][0..n-1]为标志, 指示该数据的名次是否已经确定。首先假定所有数据的名次都是1, 然后利用冒泡的思想一一确定每个数据对应的名次, 即从第i个数据开始与其后的第j (j=i+1, i+2, ......, n-1) 个数据进行一一比较, 若当前数据A[0][i]>A[0][j], 则第j个数据对应的名次加1, 若当前数据A[0][i]
下面给出具体的算法描述:
输入:输入数组A[0..2][0..n-1], 其中A[0][0..n-1中书需要排序的数据, A[1][0..n-1]为排序后各数据对应的名次A[2][0..n-1]中为名次是否确定的标志。
输出:确定了名次的数组A[0..1][0..n-1]
3 动态演示程序
在.NET开发环境中生成一个Windows应用程序, 在窗体的界面上放置一个面板控件Panel, 作为展示动态排序过程的窗口, 添加3个Timer控件, 适当设置Timer控件的Interval属性, 分别用来代替算法中的3个循环, 达到动态演示的效果。程序中的关键代码如下:
4 界面效果
该程序运行的界面效果如图1所示, 已经确定好的名次和还没有确定的名以不同的颜色进行了区分, 非常直观。
5 结语
给出按成绩进行排名次的算法并利用C#语言编程实现了该算法的动态演示, 对于一些特定的问题, 原有的经典算法不一定适合, 在遇到某些特定问题时, 可以根据具体问题进行具体分析, 在一些成熟算法的基础上针对具体问题进行思考, 可能会出现一些最初没有想到的效果。
摘要:实际应用中经常需要按照成绩进行排名次, 在排名次时, 很多情况下都要求确定数据对应的名次, 但又不要求改变数据的原始顺序。采用冒泡排序的基本思想, 给出了一个数据次序不变确定名次的有效算法, 并利用C#语言编程对该算法的实现进行了动态演示。
关键词:名次,排序,冒泡,Timer控件
参考文献
[1]谭浩强.C语言程序设计.北京:清华大学出版社, 2000.
[2]严蔚敏, 吴伟民.数据结构 (C语言版) [M].北京:清华大学出版社, 1997.
[3]M.H.Alsuwaiyel著, 吴伟, 方世昌, 等译.算法设计技巧与分析.北京:电子工业出版社, 2004.
[4]尹立宏.Visual C#.NET应用编程150例[M].北京:电子工业出版社, 2003.
[5]林邦杰.深入浅出C#程序设计[M].北京:中国铁道出版社, 2005.
按位拆分排序算法的动态演示程序 篇2
排序是计算机科学中最重要的研究问题之一[1]。其基本的排序问题是重排一个给定的数据项集,使它按递增(或递减)排列,数据项可以是具有线性顺序的任意对象[2]。传统的排序算法如冒泡排序算法、选择排序算法等,其运算效率不高,且其数据对象的适应范围受到限制[2]。近年来,许多专家学者提出了一些高效的排序算法[1,2,3,4,5]如SIS[1]、Byte-快速排序[3]、基于统计的排序[4]、比特位拆分索引排序算法[5]等。按位拆分快速排序算法作为目前最好的快速排序算法之一,其算法的思想和实现常常难以理解。设计一个好的动态演示过程,对人们快速理解按位拆分排序算法的运行很有帮助。
2 按位拆分排序算法
按位拆分的快速排序算法是首先根据数据中的比特对数据进行划分整理,将待排序列的每个数拆分成m个k位。然后按照数据由高到低每次截取k位的顺序,将待排序列分成个子序列,高k位相同的数据安排在同一个子序列中,各子序列的数据遵循段间有序、段内无序的规则。然后对各子序列的数据分别进行判断,如果排序结果有重复且还未到最底k位,则再对次高k位组成的子序列进行排序,持续上述的排序整理工作,直到排序结果无重复或子序列排序结束时,排序工作结束。整个排序的过程就是一个递归的排序过程。
用C++实现的按位拆分排序主要代码如下:
3 演示程序界面与控件
3.1 运行界面
程序运行时的界面如图1所示。
由于系统统计排序时间时采用的多线程,而动态演示时不能使用多线程,因为必需按顺序排列,所以动态演示时排序均在一个线程里面完成。因此程序里面有两个排序的函数,MultiThreadSort用于实际排序的时间统计,SingleThreadSort则用于动态演示时的排序演示。
在SingleThreadSort中,创建独立于界面线程的一个线程,采用异步通信方式与界面线程进行通信,将排序中的每一个步骤发送给界面线程,并且每个步骤完成时中间设置一个暂停的时间,以便用户可以观察到排序的每个过程,然后界面线程根据数据显示当前排序状态。
3.2 数据控件
选择数据格式控件使用的是CComboBox控件,如图2所示,用户可对排序的3种数据类型进行选择。选择数据数目控件使用的是CEdit控件和CSpinButtonCtrl控件的组合,如图3所示,用户可直接输入待排序数据的数目,也可以使用上下箭头进行数据的加减。
接下来选择数据数目4个控件使用的是CButton控件,如图4所示。
点击生成数据控件后生成待排序的原始数据,并且显示在原始数据表中,其生成数据采用的是随机生成法。点击重置控件后清空当前的所有数据。点击开始排序控件后即对当前产生的数据进行排序,此时将出现如图5所示的对话框。
此排序时间是使用MultiThreadSort进行排序得到的结果(即多线程排序),此时点击“是(Y)”按钮即可进行动态演示过程。如图6所示,使用的是CComboBox控件,显示的是待排序数据的每个字节上的二进制值,且将原数据显示在右边的中间过程及结果框里面。当所有数据全部排列完毕,此时将出现如下对话框,如图7所示。
点击确定后,即开始在右边的中间过程及结果框里面归并所有数据的排列结果,如图8所示。
此时使用的是CListBox控件,左边的用来显示点击生成数据后的原始数据。右边的用来显示排序过程中的中间结果及排序完成后归并的最终结果。最后,点击退出控件,将退出整个演示程序。
4 动态演示程序
动态演示程序的主要代码如下:
5 结语
在介绍按位拆分排序算法的基础上,采用C++编写了该算法的动态演示程序,并着重讲述了演示程序界面的控件功能和演示程序的工作原理。该演示程序图形用户界面十分直观、形象,有助于初学程序设计者更好地理解算法思想和具体实现过程,在实际的教学中收到了良好的效果。
摘要:按位拆分排序是一种新的排序算法。为了使学生更好地理解算法思想,利用C++功能强大的图形界面功能,设计实现了按位拆分排序算法的动态演示程序,其图形用户界面十分直观形象,有助于初学编程者更好地理解这一排序算法的原理和具体的实现过程。
关键词:按位拆分排序,动态演示程序,图形用户界面
参考文献
[1]Yingxu Wang.A New Sort Algorithm:Self-Indexed Sort[J].Communications of ACM SIGPALN,1996:28-36.
[2]霍红卫,许进.快速排序算法研究[J].微电子学与计算机,2002,6:6-9.
[3]朱红,陈清华,刘国发.一种Byte-快速排序算法研究[J].计算机工程,2002,28(12):39-57.
[4]马占欣,凌凤彩.一种基于统计的排序算法[J].小型微型计算机系统,2002,23(11):1403-1405.
[5]黄兴.比特位拆分索引排序算法研究[D].北京:清华大学,2007.
冒泡排序动态演示算法设计 篇3
关键词:程序,循环,冒泡排序,算法
一、引言
程序设计是大学工科学生一门必修课, 排序算法是计算机数据处理中常用的一种算法, 因此在程序设计教学中占据非常重要的地位, 尤其是冒泡排序算法非常经典, 学生在学习程序设计课程时冒泡排序是程序设计课程必学的一个重要算法。冒泡的思想学生基本上都能理解, 但是到程序设计的时候, 学生就无从入手, 学生在学习冒泡排序时, 总是觉得非常难学懂, 有畏惧心理, 总觉得学不好, 认为一维组数怎么会用到二重循环, 用一重循环编程不就可以了吗;如何教会学生学会排序算法, 一直引起教师们的注意和思考, 我们也经常讨论怎样的讲课方法, 怎样的教学方法才能使得学生轻松学会程序设计, 特别是学习一些经典算法, 使学生们学习起来不觉得困难;我们通过多年的教学实践, 总结出冒泡排序教学的有效方法, 自己设计一个冒泡排序的动态演示算法, 让学生一步一步对照冒泡算法, 程序执行到哪一步, 程序发生了什么变化, 变量的存储单元的值有发生哪些变化, 使学生一目了然算法的基本执行情况。
二、冒泡排序设计的基本框架
在教学中, 我校以学生为中心, 学生是教学的主体, 按照培养目标, 我们以学生的认知规律和学习特点安排教学;从学生的实际情况出发, 实施教学的每一个环节, 调动学生学习的积极性, 引导学生主动学习、激发学生的学习兴趣。冒泡法排序就是首先调动学生的积极性, 活跃课堂, 强调课堂师生互动, 才能使学生逐步理解。
现在冒泡算法讲解一般采用PPT的演示[1], 也有一些用Flash等演示, 这些方法致命的缺点, 就是不能动态地反应程序在计算机内部执行的情况, [2][3]文中的动态还不能反映存储的动态变化。我们设计的算法从头到尾, 从数据到存储的变化, 就是动态变化, 只要输入的数据不一样, 程序执行的过程就不一样, 完全是动态执行和存储动态变化。示例如下:
冒泡排序的动态算法演示, 有助于学生理解算法, 以下是冒泡排序的动态算法演示的框架结构的基本步骤。
1. 手动排序, 单击鼠标一步一步执行, 让学生看得明明白白。
2. 自动排序, 主要是演示, 让计算机自动一步一步执行冒泡排序的算法, 并且可以设定每一步显示时间的秒数。
3. 手动和自动之间任意切换。
4. 每执行一步变量发生变化, 立刻在文本框中显示出来。
5. 程序的每一步执行过程都以高亮度把源程序显示, 明确已经程序执行到那一步。
6. 每执行一步, 程序在做什么事情, 左边的数组流程图和右边的程序一一对应, 便于学生对应理解。
7. 冒泡算法的基本步骤和设计思想显示。
三、冒泡排序动态演示的实现过程
冒泡排序动态演示的设计, 重要的是要设计2个定时器, 定时器的目的主要是为了程序执行时, 什么时候单步执行, 什么时候自动执行, 什么时候停止程序运行, 当激活定时器时, 程序就自动执行, 当定时器设为不可用时, 程序就自动停止执行。
开始把冒泡算法的整个源程序通过加载在窗体的右上角的列表框中显示出来, 然后在窗体的左边显示n个文本框和文本框对应的标签, 文本框就是放数组, 标签就是数组的编号, 目的为了显示排序的过程和结果。窗体下面显示冒泡排序的设计思想, 中间显示存储单元的变化情况, 以及命令按钮。
刚开始定时器1和2都设为不可用, 把冒泡排序的程序放在时钟Timer1_Timer () 和Timer2_Timer () 中, 用多分段语句把冒泡算法放在各个多分段语句中, 其中设一个计数器, 用于多分段语句的执行次序, 当单击手动按钮时, 就是调用定时器1, 由于没有激活定时器1, 每调用计时器一次, 就像普通的过程调用, 定时器就计数器所对应的语句执行一次;当在Timer1_Timer () 中执行到内循环时, 调用定时器2, Timer2_Timer () 主要是为了执行数组的排序过程, 以及数据的下沉和上浮, 同时对数组中数据的颜色显示, 以及存储单元的变化, 那么就是单步执行, 我们也称手动操作。
如果是自动演示, 只要在命令按钮中把定时器1设为“true”, 并且设置每执行一步的秒数, 程序就会在定时器中反复执行, 当要执行到内循环时, 停止定时器1, 即把定时器1设为“false”, 定时器2设为“true”, 同样定时器2执行完毕, 又把定时器1设为“true”, 定时器2设为“false”, 定时器1有启动了。
排序算法设计的引伸教学的思考, 动态冒泡排序算法可以延伸到程序设计中任何算法和程序, 同样可以延伸到其它学科的动态演示[5]。
四、总结
由于冒泡排序相对比较难学, 我们自己编制了一个“基于动态的冒泡排序自学习演示算法”, 结合讲课方法, 边讲解边演示, 也可以帮助学生在平时自己复习和学习, 这种程序动态的变化, 包括存储单元值的动态变化, 使学生一目了然看清程序每一个语句的执行情况和存储单元变化的情况, 更有利于学生快速地掌握选择法排序的算法, 不管在何时何地, 只要有电脑的地方都可以方便地学习。
教学方法探讨无止境, 这种教学方法实际上和选择法排序算法有很多相似之处, 只要学生学会了冒泡排序算法的基本思想, 很容易推广到选择法排序算法和其它排序算法, 学生也比较容易学会;如果有条件的学校, 编制一些其它排序的算法, 然后让学生编一个其它排序的算法, 教师给出一些提示, 要求学生编完程序以后和选择法排序和冒泡排序作一些比较, 那个算法更优, 对以后的学习学生的编程兴趣和积极性会更高, 可以充分调动学生学习的主动性, 激发了学生学习程序设计的热情和兴趣, 同时也培养了学生的思考能力和解决问题的能力, 做到了事倍功半的效果。
我们不仅编写了C程序设计的冒泡算法, 而且还设计了C和VB的一整套动态演示算法, 包括选择法排序、if…else、switch、for、while、do…while、求素数、求最大值等一系列动态演示算法, 以后准备设计成一个CS结构的C程序设计和BS结构的动态演示系统。这些算法只要学生肯学, 一定能让学生会学会程序设计, 除非学生不学。本文交流的目的就是想达到一个抛砖引玉的作用, 大家共同来探讨程序设计的教学方法, 提高教学质量。
参考文献
[1]杜素芳.“排序算法的实现”教学探索[J].福建电脑, 2011, (2) :213-214.
[2]胡晓芳, 李欣.基于Flash制作的算法演示动画的设计[J].中国教育技术装备, 2009, (8) , 45-47.
[3]冯娜, 孙义欣.基于冒泡法排序的动态演示程序[J].电脑知识与技术, 2009, 5 (5) :1175-1178.
[4]刘娜, 佟冶.归并排序算法实现的理解与教学过程[J].计算机教育, 2007, (9) :66-68.
C#实现数字排列题算法演示 篇4
编程能力的提高需要通过大量的编程实践, 在实践的过程中掌握一些编程的技巧;同时问题的解决还需要有正确的解决方案, 也就是要找出正确的算法。在解决实际问题时, 首先针对具体问题进行分析, 找到合适的算法后才能通过编程实现。通过C#编程实现了下面数字排列题目的可视化动态演示, 通过可视化动态演示, 可以更加直观地观察算法执行的步骤, 有助于对算法的理解。题目描述如下:
在如图1所示的9个点上, 空出中间的点, 其余的点上任意填入数字1—8;1的位置固定不动, 然后移动其余的数字, 使1—8按顺时针从小到大排列。移动的规则是:只能将数字沿线移向空白的点。移动完成后的结果如图2所示。
分析题目中的条件, 要求利用中间的空白格将数字按顺时针排列, 且排列过程中只能借助中间的空格来移动数字。问题的实质就是将矩阵四周的8个元素看成一个环, 8个数字在环内进行排序。由于题目限制“只能将数字沿线移向空白的点”, 所以利用中间的空格进行排序, 这样要求的排序算法与通常的排序算法不同。
观察中间的空格, 它是唯一一个能与其他8个点有连线的空格。中心空格的活动空间最大, 它可以向8个方向移动, 充分利用中心的空格这一特性是算法设计成功与否的关键。
将数据存放在一个一维数组data[9]中, 例如, 上面图1中的数据存储为data:{8, 1, 4, 5, 0, 3, 7, 2, 6}, 用另外一个一维数组position[8]存放data数组四周的元素在data数组中对应的下标, position数组的元素为为:{0, 1, 2, 5, 8, 7, 6, 3}, 这样利用position数组可以使data数组中四周的元素构成一个环, 有助于简化程序的设计。
在8个元素构成的环中, 从环的position[0]位置开始查找, 在找到数字1所在的位置后, 其余各个数字的正确位置就是确定的。可以按照下列算法从数字2开始, 一个一个地来调整各个数字的位置:
(1) 首先确定数字i所处的位置。
(2) 从数字i应处的位置开始, 向后查找数字i现在的位置。
(3) 若数字i现在所处的位置不正确, 则将数字i从现在的位置移向中间的空格, 将原有位置空出。
(4) 依次将空出位置前的所有元素向后移动, 直到将i应处的位置空出。
(5) 把数字i从中间的空格移入正确的位置。
(6) 将i加1后重复上述步骤, 直到将所有的数字全部放好, 算法结束。
2 程序实现
算法中用一个一维数组data存放待排序的数据, 用另一个一维数组position记录矩阵四周的8个元素在数组data中对应的下标, 中间的元素正好是空格, 程序开始执行时, 在找到数字1所在的位置后, 用另一个数组nPosition[]重新记录环中元素的位置, 这样可以简化程序的设计。
程序中使用一个大小为210*210的标签控件作为演示界面, 设置其背景色为黑色, 充分利用C#语言的绘图功能在该标签控件上实现演示界面的绘制;分别利用3个定时器控件代替排序过程中的3个循环, 3个定时器控件的定时间隔都设置为1秒 (根据需要可以调整) , 充分利用定时器控件的定时功能实现了一种动态的效果。程序中主要的代码如下:
3 程序运行界面
程序运行界面如图3所示, 程序运行后, 在标签的四周出现随机产生的1———8的随机数, 中间的空格为0, 当点击“开始排序”按钮时, 排序开始, 首先确定数字1的位置, 然后从数字1所在位置按顺时针方向查找数字2的位置, 当找到数字2后, 将数字2和中间空格中的0交换位置, 然后在数字0之前和数字1之后的数据依次向后移动, 将数字1之后的位置空出, 然后数字2移到数字1之后。重复上述过程, 依次把3———8填入正确的位置, 在右边的文本框中显示排序的进程。单击“重新生成数据”按钮时, 重新产生随机序列, 清空文本框, 可以再次排序。
4 结语
许多人在学习了一种程序设计语言的基本语法后, 遇到具体问题的时候仍然感觉无从下手, 究其原因是没有找到解决问题的有效方法, 也就是没有找到合适的算法。因此, 在学习程序设计的时候, 应该重视算法的学习, 在掌握一些基本算法的基础上才能根据实际问题进行变通, 而算法有时又感觉到太抽象, 不容易理解和掌握。利用C#中提供的基本控件以及强大的绘图功能, 将数字排列题的算法进行了演示, 将抽象的知识可视化, 有助于学习编程者对于算法的理解。
摘要:编程解决实际问题, 通过实践, 掌握一定的编程技巧, 找到解决问题的正确方案。通过一道数字排列题的解决演示, 灵活运用C#语言编程实现了该问题算法的可视化演示。
关键词:算法,可视化,标签控件,数字排列,定时器控件
参考文献
[1]严蔚敏, 吴伟民.数据结构 (C语言版) .北京:清华大学出版社, 1997.
[2]谭浩强.C语言程序设计[M].北京:清华大学出版社, 2000.
[3]明日科技.Visual C#开发技术大全.北京:人民邮电出版社, 2007.
算法演示程序 篇5
关键词:面向对象的程序设计,演示,Vfp6.0,归纳
面向对象的可视化程序设计,最适宜的教学手段是采用演示可视化的方法,使学生通过屏幕上的投影,清晰的看到面向对象程序设计时,各操作阶段所形成的界面,最终得出的目标文件,以及目标文件的运行结果。
Vfp6.0是一种当今比较流行的运用于微机的数据库管理系统,具有很强的命令和语言功能,不仅支持过程化编程技术,还支持面向对象的可视化编程技术[1]。为了真切、形象、生动地教授这门课程,采用演示方法进行教学。
演示教学方式相对于传统教学的课堂板书式的教学方式,存在着新的值得探索的课题,新的值得把握的处理艺术。对于演示教学方式不仅要注意演示的操作及其描述,还特别要注意对演示的内容的归纳总结。演示教学把学生引入了科学的迷宫,而归纳可以使学生走向畅游科学的道路。面向对象的程序设计所涉及的新知识及各个方面的要素很多,对于任何初学者而言,完全如同进入迷宫。所以,如何使用归纳,其作用尤为突出,学生能否掌握面向对象的程序设计的方法,关键就在于此。
在Vfp6.0中,表单设计最完整、集中地体现了面向对象程序设计的方法和特点,单独地讲述面向对象程序设计的方法,存在着枯燥和空洞的问题,学生难于接受。所以,面向对象程序设计方法的教学适宜与表单设计的讲授结合起来,使两者内容并行地深入。
在表单设计的教学中,特别强调对于面向对象程序设计的基本步骤的归纳:
1. 确定对象;
2. 确定对象的属性;
3. 确定某些对象的事件;
4. 编写事件的响应代码。
上述归纳,可以使学生在设计表单时不至于不知方向,避免发生混乱。
在学生把握了面向对象程序设计的基本步骤之后,进一步向学生指明:为了修改表单,为了使设计简明,可以将面向对象程序设计的基本步骤进行穿插,但面向对象的程序设计仍然由四个基本步骤组合而成。在表单设计中,简明化是指先实现功能(核心内容),然后进行美化(外观形式处理)。同时指出,就像使用Office的Word等软件使用中要先“编辑(内容处理)”,“后格式(样式处理)”一样,两者的道理是一样的。这种方法可以避免由于内容犬牙交错所造成的问题复杂化。简明化可以避免混乱,可以把由错误所造成的损失降低到最小。
经观察发现,学生在表单设计的上机操作时,最感兴趣的是对表单行进美化,而最大的困难是编写程序代码,在程序代码这一表单设计的核心内容实现之前,学生已经对表单进行了复杂的美化,而学生在编写代码时又难免出错,由于不注意简明的原则,学生的表单设计极易发生混乱,造成失败,费工多时的美化工作也随之付之东流。所以,所做的“先功能后形式”的归纳对于学生顺利完成表单设计的上机操作产生了良好的效果。
在讲课时,不仅要使学生掌握具体内容,还要通过具体内容掌握一般的处理问题的思想方法。上述的表单设计方法所体现的是,要善于把待处理的对象分解成若干基本的层次,并且按层次处理问题,这样对复杂问题的处理就等同于对若干简单问题的处理。这种思想方法可以有力地提高学生的素质。
对设计表单所作的归纳体现的另一种思想方法是,要认识复杂结构的关键环节。对于利用表单设计器设计表单时,存在表单控件工具栏、布局工具栏、表单设计器工具栏、属性窗口、代码窗口、数据环境生成器、表单生成器………,这些工具构成了创建表单的强大功能,但是面对这么多的工具,怎样合理的使用,最好的方法是从表单设计器工具栏开始,只要打开表单设计器工具栏,就可以通过直接点击工具按钮的方式,方便地打开其它表单设计工具。所以在用表单设计器设计表单时,要意识到首先寻找或者打开表单设计器工具栏,这种意识有利于把握表单的设计,减少周折。本例说明复杂往往是一种表面现象,复杂结构的整个组成部分具有规律性的联系,并且存在着关键环节,从关键环节开始就可以把握整个结构。在计算机教学中,有些要诀似乎是老生常谈,例如说,点击右键可以出现和当前被点击的对象相关联的快捷菜单;在Vfp6.0中,如果当前运行的程序不同,所显示的主菜单和下拉菜单的选项也不同,但是学生未必对这些要诀产生应有的意识。利用Vfp6.0系统,学生进行各种操作时,经常出现不知所措的情况。所以,经常适时适地强调这些学生熟视无睹的要诀及技巧,对于提高学生计算机使用技能是很有益处的。广而论之,对于那些所熟知的道理,究竟有没有意识到去遵循呢?又遵循了多少呢?其实很少,宝库就在身边,不要忘记去利用。
不能给学生提供一堆知识材料,要提供一个科学框架。忘却是难免的,随着时间的推移,材料会丢失,但是框架将保存,在需要时,材料将会被很快地填充到框架中。那么如何形成一各框架,这就要进行归纳,只有通过归纳才能在教学中形成科学的框架。所以,对于利用现代多媒体教学方式,进行可视化演示教学时,不可被形式所局限,不仅要注意演示的操作步骤描述,还要特别注意对于演示内容的归纳总结。
参考文献
算法演示程序 篇6
“查找”操作是计算机中的一项基本操作。所谓“查找”即为在一个含有众多元素或记录的查找表中找出某个“特定”的数据元素或记录。
顺序查找方法是一种最基本的查找算法,在一般的计算机语言程序设计课和数据结构课程中都有介绍。顺序查找方法一般用于顺序表表示的静态查找表,其中的元素或记录是无序的。其查找过程为:从表中的最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查的记录并返回所查的记录在查找表中的位置;反之,若直至第一个记录,其关键字和给定值比较都不相等,则表明表中没有所查找的记录,查找不成功,返回0。此查找过程可用下面的算法描述:
算法:Sequential_search(int A[0..n],int x)
输入:有n个元素的数组A[0..n]和给定的特定值x。
输出:如果x=A[j],则输出j;否则输出0。
过程:A[0]=x;//在最低下标处设置“哨兵”
for j=A.Length to 0 step-1//从后向前查找
if(A[j]==x)
return j;
//找到返回x在数组中的位置,找不到时返回0
endfor
2 动态演示程序的实现
打开Visual Studio 2005,新建一个Visual C#Windows应用程序项目,项目名称为“SearchData”,将默认窗体名称Form1改为SearchFormDemo,在窗体上添加一个Panel控件,作为动态演示顺序查找过程的窗口,添加两个Timer控件,设置其Interval属性为1000,用来代替算法中的循环和查找比较过程,用Timer控件的定时特点来达到动态演示的效果。程序运行界面如图1所示。
2.1 生成初始数据并安排界面
当单击“生成数据”按钮时,首先将演示窗口清空,然后随机产生查找表中的数据以及要在其中查找的数据,并将这些数据用动态生成的Label控件展示在界面上,同时设置监视哨。为了达到明显的动态效果,对Label控件的前景色和背景色都进行了设置。
2.2 开始查找
当单击“开始查找”按钮时,首先将指针定位在最后一个记录上,使查找从最后一个记录开始。同时启动定时器以开始查找过程,此时需禁用“开始查找”按钮。
2.3 控制查找过程的定时功能
第一个定时器用来控制循环操作,当查找还没有结束时,继续查找,否则结束查找。
2.4 控制比较操作的定时功能
通过定时器控件的定时功能以及Label控件颜色的变换实现比较操作的动态演示。
3 结语
算法一般是比较抽象的,通常难以理解,不容易掌握和理解算法的实质和实现过程,尤其是对初学者来说,若不能把握算法的实质,则很难顺利地写出程序,因此,将算法的实现过程形象、直观地表现出来,对于掌握算法有重要的意义。
摘要:顺序查找算法是在学习各种程序语言和数据结构课程时都会遇到的算法,采用C#编程对该算法的实现过程进行了形象、直观的动态演示。
关键词:查找,关键字,哨兵,定时
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997.
[2]谭浩强.C语言程序设计[M].北京:清华大学出版社,2000.
[3]尹立宏.Visual C#.NET应用编程150例.北京:电子工业出版社,2003.
算法演示程序 篇7
所谓“查找”就是在一个含有众多的数据元素(或记录)的查找表中找到某个特定的“数据元素(或记录)”。若表中存在这样的一个记录,则称查找是成功的,可以给出整个记录的信息,或指示该记录在查找表中的位置;若表中不存在关键字等于给定值的记录,则称查找不成功,可以给出查找不成功的相应信息。
1 折半查找算法介绍
在计算机中进行查找的方法随数据结构的不同而不同。折半查找方法适用于查找存储在有序的线性表中的记录,其查找过程为:先确定待查记录所在的范围,然后以该范围内的中间记录的关键字和给定的关键字进行比较,若相等,则查找成功;若给定的关键字小于中间记录的关键字,则舍弃掉线性表的后半部分以缩小范围继续查找;若给定的关键字大于中间记录的关键字,则舍弃掉线性表的前半部分以缩小范围继续查找。循环直到新的区间位置记录的关键字等于给定值或者查找区间的大小小于零时(表明查找不成功)为止。
折半查找算法的描述如下:
2 用C#实现的动态演示程序
打开Visual Studio 2005,新建一个Visual C#Windows应用程序项目,项目名称为Binary Search,将默认窗体名称Form1改为Binary Search Form,在窗体上添加一个Panel控件,作为动态演示折半查找过程的平台,添加两个Timer控件,设置其Interval属性为1000,用来代替算法中的循环和查找比较过程,用Timer控件的定时特点来达到动态演示的效果。程序中的主要代码如下,为了有助于读者更好的理解,在其中添加了比较详细的注释:
3 程序运行界面效果
程序运行的界面效果如图1所示,从图中可以清楚地看到已经被舍弃掉的部分和还没查找完的部分,初始的数据以红色背景色和黄色前景色显示,查找范围的第一个和最后一个数据以黄色背景色和红色前景色标出,查找范围中的中间元素以蓝色背景色和白色前景色标出,舍弃掉的部分以系统背景色和黑色前景色显示。程序通过视觉变换和延时形成了动态演示查找过程的效果。如果运行时感到效果不理想,可以将数组容量设置的大一些,同时可以适当调整两个定时器的时间间隔,以控制查找的速度,从而可以更好的体会折半查找的过程。
4 结束语
算法一般是比较抽象的,我们在学习算法时,大多是通过老师根据一个具体的例子用粉笔在黑板上对算法的实现过程进行讲解,或通过教材上的描述进行自学,掌握起来非常不容易。在具体编程时一般只会看到算法实现的结果,而看不到算法的实现过程,缺乏直观性和生动性,学生难以接受。本文用C#编程对折半查找算法的实现过程进行了可视化的动态演示,有助于读者更好地掌握这一算法的基本思想,同时也希望能起到抛砖引玉的作用,大家共同开发一些算法的可视化演示程序,让初学者能够从中受益。
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:清华大学出版社,1997.
[2]王晓东.计算机算法设计与分析[M].北京:电子工业出版社,2006.
[3]李继武.Visual C#.NET项目开发实战[M].北京:清华大学出版社,2007.
【算法演示程序】推荐阅读:
动态演示程序12-11
程序算法01-07
程序算法分析07-18
MATLAB程序算法10-12
算法与程序设计教学08-09
《算法与程序设计》教学探析 期10-22
VB程序设计的常用算法教案05-21
图像放大算法总结及MATLAB源程序11-15
演示模型07-17
课堂演示01-21