2024年9月排序算法演示网站(各种内部排序算法演示用C语言实现 排序过程中用动态的显示)

 更新时间:2024-09-21 08:52:14

  ⑴排序算法演示网站(各种内部排序算法演示用C语言实现排序过程中用动态的显示

  ⑵各种内部排序算法演示用C语言实现排序过程中用动态的显示

  ⑶#include《stdio.h》#define?MAX?int?quick(int?*a,int?l,int?r,int?length){????int?counter=,i;????a;????while(l《r)????{????????while(l《r&&a)????????????r--;????????a;????????while(l《r&&a)????????????l++;????????a;????}????a;????printf(“Step?%d:?“,++counter);????for(i=;i《length;i++)????????printf(“%d?“,a);????printf(“%d

  ⑷“,a);????return?l;}void?quicksort(int?*a,int?l,int?r,int?length)?????//快速排序{????int?p;????if(l《r)????{????????p=quick(a,l,r,length);????????quicksort(a,l,p-,length);????????quicksort(a,p+,r,length);????}}void?heap(int?*a,int?length,int?i){????int?s=i,t;????if(*i《=length&&a)????????s=*i;????if(*i+《=length&&a)????????s=*i+;????if(s!=i)????{????????t=a;????????a;????????a=t;????????heap(a,length,s);????}}void?heapsort(int?*a,int?length)??????????//堆排序{????int?i,t,counter=,k=length;????for(i=length/;?i》=;?i--)????????heap(a,length,i);????while(length》)????{????????t=a;????????a;????????a=t;????????heap(a,--length,);????????printf(“Step?%d:?“,++counter);????????for(i=;i《k;i++)????????????printf(“%d?“,a);????????printf(“%d

  ⑸“,a);????}}void?insertsort(int?*a,int?length)??????//插入排序{????int?i,j,t,k,counter=;????if(length==)????{????????printf(“Step?%d:?%d

  ⑹“,++counter,a);????????return;????}????for(i=;?i《=length;?i++)????{????????t=a;????????for(j=i-;?j》&&a》=t;?j--);????????for(k=i-;?k》=j+;?k--)????????????a;????????a=t;????????printf(“Step?%d:?“,++counter);????????for(k=;k《length;k++)????????????printf(“%d?“,a);????????printf(“%d

  ⑺“,a);????}}int?main(){????int?n,i;????int?a;????while(scanf(“%d“,&n)&&n)????{????????for(i=;i《=n;i++)????????????scanf(“%d“,&a);????????quicksort(a,,n,n);????}????return?;}

  ⑻快速排序算法的排序演示

  ⑼假设用户输入了如下数组:下标数据创建变量i=(指向第一个数据,j=(指向最后一个数据),k=(赋值为第一个数据的值)。我们要把所有比k小的数移动到k的左面,所以我们可以开始寻找比小的数,从j开始,从右往左找,不断递减变量j的值,我们找到第一个下标的数据比小,于是把数据移到下标的位置,把下标的数据移到下标,完成第一次比较:下标数据i=j=k=接着,开始第二次比较,这次要变成找比k大的了,而且要从前往后找了。递加变量i,发现下标的数据是第一个比k大的,于是用下标的数据和j指向的下标的数据的做交换,数据状态变成下表:下标数据i=j=k=称上面两次比较为一个循环。接着,再递减变量j,不断重复进行上面的循环比较。在本例中,我们进行一次循环,就发现i和j“碰头”了:他们都指向了下标。于是,第一遍比较结束。得到结果如下,凡是k(=)左边的数都比它小,凡是k右边的数都比它大:下标数据如果i和j没有碰头的话,就递加i找大的,还没有,就再递减j找小的,如此反复,不断循环。注意判断和寻找是同时进行的。然后,对k两边的数据,再分组分别进行上述的过程,直到不能再分组为止。注意:第一遍快速排序不会直接得到最终结果,只会把比k大和比k小的数分到k的两边。为了得到最后结果,需要再次对下标两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据,才能得到正确结果。在c++中可以用函数qsort(可以直接为数组进行排序。用法:voidqsort(void*base,intnelem,intwidth,int(*fcmp)(constvoid*,constvoid*));参数:待排序数组首地址数组中待排序元素数量各元素的占用空间大小指向函数的指针,用于确定排序的顺序

  ⑽十大经典排序算法动画演示

  ⑾姓名:邓霜意??????????????学号:【嵌牛导读】:排序算法是算法学习中的重难点,本文通过动画的形式清楚明了的展示经典排序算法的原理与思想。【嵌牛鼻子】:快速排序选择排序堆排序希尔排序归并排序【嵌牛提问】:最好的排序算法是什么?【嵌牛正文】:、SortingAlgorithmsAnimations、算法的分类、时间复杂度算法、冒泡排序、快速排序、直接插入排序、选择排序、归并排序、堆排序、希尔排序、计数排序、基数排序、桶排序总结:目前并没有十全十美的排序算法,有优点就会有缺点,即便是快速排序算法,也只是整体性能上优越,它也存在排序不稳定、需要大量的辅助空间、对少量数据排序无优势等不足。因此我们需要根据待排序数据的具体情况以及性能要求选择合适的排序算法。

  ⑿C语言实现七种排序算法的演示代码是什么

  ⒀“冒泡法”冒泡法大家都较熟悉。其原理为从a处理,即完成排序。下面列出其代码:voidbubble(int*a,intn)/*定义两个参数:数组首地址与数组大小*/{inti,j,temp;for(i=;i《n-;i++)for(j=i+;j《n;j++)/*注意循环的上下限*/if(a){temp=a;a;a=temp;}}冒泡法原理简单,但其缺点是交换次数多,效率低。下面介绍一种源自冒泡法但更有效率的方法“选择法”。(“选择法”选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a,这样就比冒泡法省下许多无用的交换,提高了效率。voidchoise(int*a,intn){inti,j,k,temp;for(i=;i《n-;i++){k=i;/*给记号赋值*/for(j=i+;j《n;j++)if(a)k=j;/*是k总是指向最小元素*/if(i!=k){/*当k!=i是才交换,否则a即为最小*/temp=a;a;a=temp;}}}选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属,现在就让我们来了解它。(“快速法”快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j).它首先选一个数组元素(一般为a,即中间元素作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码:voidquick(int*a,inti,intj){intm,n,temp;intk;m=i;n=j;k=a;/*选取的参照*/do{while(a《k&&m《j)m++;/*从左到右找比k大的元素*/while(a》k&&n》i)n--;/*从右到左找比k小的元素*/if(m《=n){/*若找到且满足条件,则交换*/temp=a;a;a=temp;m++;n--;}}while(m《=n);if(m《j)quick(a,m,j);/*运用递归*/if(n》i)quick(a,i,n);}(“插入法”插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。voidinsert(int*a,intn){inti,j,temp;for(i=;i《n;i++){temp=a;/*temp为要插入的元素*/j=i-;while(j》=&&temp《a){/*从a小的数,同时把数组元素向后移*/a;j--;}a=temp;/*插入*/}}(“shell法”shell法是一个叫shell的美国人与年发明的。它首先把相距k(k》=)的那几个元素排好序,再缩小k值(一般取其一半,再排序,直到k=时完成排序。下面让我们来分析其代码:voidshell(int*a,intn){inti,j,k,x;k=n/;/*间距值*/while(k》=){for(i=k;i《n;i++){x=a;j=i-k;while(j》=&&x《a){a;j-=k;}a=x;}k/=;/*缩小间距值*/}}上面我们已经对几种排序法作了介绍,现在让我们写个主函数检验一下。#include《stdio.h》/*别偷懒,下面的“...“代表函数体,自己加上去哦!*/voidbubble(int*a,intn){...}voidchoise(int*a,intn){...}voidquick(int*a,inti,intj){...}voidinsert(int*a,intn){...}voidshell(int*a,intn){...}/*为了打印方便,我们写一个print吧。*/voidprint(int*a,intn){inti;for(i=;i《n;i++)printf(“%d“,a);printf(“

  ⒁“);}main(){/*为了公平,我们给每个函数定义一个相同数组*/inta={,,,,,,,,,};inta={,,,,,,,,,};inta={,,,,,,,,,};inta={,,,,,,,,,};inta={,,,,,,,,,};printf(“theoriginallist:“);print(a,);printf(“aordingtobubble:“);bubble(a,);print(a,);printf(“aordingtochoise:“);choise(a,);print(a,);printf(“aordingtoquick:“);quick(a,,);print(a,);printf(“aordingtoinsert:“);insert(a,);print(a,);printf(“aordingtoshell:“);shell(a,);print(a,);}

  ⒂十大经典排序算法(动图演示之桶排序

  ⒃桶排序(BucketSort

  ⒄桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序(Bucketsort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排。

  ⒅桶排序最好情况下使用线性时间O(n),桶排序的时间复杂度,取决与对各个桶之间数据进行排序的时间复杂度,因为其它部分的时间复杂度都为O(n)。很显然,桶划分的越小,各个桶之间的数据越少,排序所用的时间也会越少。但相应的空间消耗就会增大。

  ⒆几种排序算法的演示,要求给出从初始开始时的每一趟的变化情况,并对各种排序算法的排序性能做分析和比较

  ⒇//冒泡排序#include《iostream》usingnamespacestd;voidprint(int*a,intn){for(inti=;i《n;i++){cout《《a《《’’;}cout《《endl;}voidsort(int*a,intn){for(inti=;i《n-;++i){//进行n-次排序boolf=true;for(intj=;j《n--i;j++){//两两相比if(a){intt=a;a;a=t;f=false;}}cout《《“第“《《i《《“次:“;print(a,);if(f)break;}}intmain(){inta={,,,,,,,,,};cout《《“排序前:“;print(a,);sort(a,);cout《《“排序后:“;print(a,);}//选择排序#include《iostream》#include《algorithm》usingnamespacestd;voidprint(int*a,intn){for(inti=;i《n;i++){cout《《a《《’’;}cout《《endl;}voidsort(int*a,intn){for(inti=;i《n-;i++){intk=i;//假设i是最小的数的下标for(intj=i+;j《n;j++){if(a)k=j;}if(i!=k)swap(a);cout《《“第“《《i《《“次:“;print(a,);}}intmain(){inta={,,,,,,,,,};cout《《“排序前:“;print(a,);sort(a,);cout《《“排序后:“;print(a,);}//快速排序#include《iostream》#include《algorithm》usingnamespacestd;voidprint(int*a,intn){for(inti=;i《n;i++){cout《《a《《’’;}cout《《endl;}voidsort(int*a,intn){//当分组中的数据是个或个时,分组结束if(n《=)return;//将数据分成两个组intL=;intR=n-;while(L《R){while(L《R&&a)R--;swap(a);while(L《R&&a)L++;swap(a);}//对左边的组再进行分组sort(a,L);//对右边的组再进行分组sort(a+L+,n-L-);}intmain(){inta={,,,,,,,,,};cout《《“排序前:“;print(a,);sort(a,);cout《《“排序后:“;print(a,);}//插入排序#include《iostream》#include《algorithm》usingnamespacestd;voidprint(int*a,intn){for(inti=;i《n;i++){cout《《a《《’’;}cout《《endl;}voidsort(int*a,intn){for(inti=;i《n;++i){intt=a;//要插入的元素intj=i;//要插入的位置for(;j》&&a》t;--j){a;}a=t;cout《《“第“《《i《《“次:“;print(a,);}}intmain(){inta={,,,,,,,,,};cout《《“排序前:“;print(a,);sort(a,);cout《《“排序后:“;print(a,);}

  ⒈PHP快速排序算法实现的原理及代码详解

  ⒉算法原理下列动图来自五分钟学算法,演示了快速排序算法的原理和步骤。步骤:从数组中选个基准值将数组中大于基准值的放同一边、小于基准值的放另一边,基准值位于中间位置递归的对分列两边的数组再排序代码实现functionquickSort($arr){$len=count($arr);if($len《=){return$arr;}$v=$arr;$low=$up=array();for($i=;$i《$len;++$i){if($arr》$v){$up=$arr;}else{$low=$arr;}}$low=quickSort($low);$up=quickSort($up);returnarray_merge($low,array($v),$up);}测试代码:$startTime=microtime();$arr=range(,);shuffle($arr);echo“beforesort:“,implode(’,’,$arr),“

  ⒊“;$sortArr=quickSort($arr);echo“aftersort:“,implode(’,’,$sortArr),“

  ⒋“;echo“usetime:“,microtime()-$startTime,“s

  ⒌“;测试结果:beforesort:,,,,,,,,,aftersort:,,,,,,,,,usetime:.s时间复杂度快速排序的时间复杂度在最坏情况下是O(N),平均的时间复杂度是O(N*lgN)。这句话很好理解:假设被排序的数列中有N个数。遍历一次的时间复杂度是O(N),需要遍历多少次呢?至少lg(N+)次,最多N次。)为什么最少是lg(N+)次?快速排序是采用的分治法进行遍历的,我们将它看作一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的定义,它的深度至少是lg(N+)。因此,快速排序的遍历次数最少是lg(N+)次。)为什么最多是N次?这个应该非常简单,还是将快速排序看作一棵二叉树,它的深度最大是N。因此,快读排序的遍历次数最多是N次。您可能感兴趣的文章:PHP快速排序算法实例分析PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】PHP排序算法之快速排序(QuickSort)及其优化算法详解PHP递归实现快速排序的方法示例php二维数组快速排序算法的实现代码PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】PHP快速排序quicksort实例详解

  ⒍用Javascript写排序算法的动画演示

  ⒎让JavaScript暂停下来,慢下来。JavaScript排序是很快的,要我们肉眼能看到它的实现过程,我首先想到的是让排序慢下来。排序的每一个循环都让它停ms然后再继续进行。怎么样才能停下来呢。查了一下JavaScript貌似没有sleep()这样的函数。暂停做不到,但是可以想办法让实现跟暂停差不多的效果。比如在循环里做一些无关的事情。首先尝试了让while(true)来一直执行一个空操作。执行一段时间再回到排序逻辑。代码大致是这样:for(vari=;i《;i++){document.writeln(i);//DOM操作varnow=newDate().getTime();while(newDate().getTime()-now《){}}慢是慢下来了。不过太耗资源,排序进行过程中dom并不会有任何改变,直到排序结束,DOM会变成排序好之后的样子。但是如果设置断点一步步执行的时候又可以看到一步步的排序变化。估计是因为这个操作太耗资源导致浏览器下达了一个DOM操作的命令但是一直腾不出资源来进行DOM操作。所以真正DOM操作的时候在js代码执行结束之后。所以让JavaScript排序慢来来还是没有实现。另一种让JavaScript暂停下来的思路:写这个文章的时候又想到一种方法来让JavaScript停下来。那就是AJAX的同步请求,以及超时操作。也就是在要停下来的地方放一个AJAX请求,同步请求,然后设置超时。超时的时间就是我们要暂停的时间。为了避免在到达超时请求之前服务器就返回了我们的AJAX请求。可以在服务端运行类似sleep()的程序。从而保证AJAX不会返回。直接超时然后返回到我们的循环。不过这只是个设想。有兴趣的可以去尝试一下。.闭包和定时器。这种思路不需要让排序过程慢下来。而是使用闭包缓存排序过程中数组的变化。然后使用setTimeout来确定展示每一个数组状态的顺序。在排序循环中放入类似下面的代码。(function(){vartheArr=arr.slice();//当前数组状态的备份setTimeout(function(){bubbleSortDom(theArr);//排序的DOM操作。},*timeCount);timeCount++;//定时器的顺序。})();不过后来发现这样子写的话代码量会比较大,逻辑有修改的话要修改的地方会有点多。局限性很多,比如要实现排序动画加快或减慢操作几乎是很困难的。所以还要另想办法。.缓存排序中的数组状态。也就是在排序过程中。将数组的每一轮循环的状态保存到一个数组。然后再用这个数组依次将排序状态保存下来。只需要在排序中加入一句就行。this.pushHis(arr.slice(),i-,j,k,temp);这样就只需要一个setInterval()就可以了。并且可以很方便的实现动画的加快与减慢。逻辑也比较好理解。问题二:如何实现JavaScript排序动画的加快与减慢。我们问题一使用的第三种方法。得到一个保存了每一步排序状态的数组arr。然后我们可以使用一个setInterval()定时器一步步展现排序状态。如果要加快速度或减慢速度。就clearInterval(),修改定时器的执行间隔,重新setInterval(),从前一个定时器执行到数组中的位置开始执行。问题三:对于使用递归实现的数组怎么办?不是在原数组上进行操作的怎么办?使用递归实现的排序。可能并没有在一个数组上进行操作,只是最后返回一个排序好的数组出来。那么我们要如何获得排序中的数组的完整状态呢。比如快速排序。最开始不考虑动画,我的实现是这样的:functionquickSort(arr){varlen=arr.length,leftArr=,tag;if(len《){returnarr;}tag=arr;for(i=;i《len;i++){if(arr《=tag){leftArr.push(arr)}else{rightArr.push(arr);}}returnquickSort(leftArr).concat(tag,quickSort(rightArr));}然后为了考虑动画,我改写了它的逻辑,让它在同一个数组上进行了实现。其实是在递归的时候传入了当前的的子数组在原数组中的起始位置。从而在原数组上进行了操作。用了两种方法来实现方式。在排序逻辑上略有不同。第一种是先跟远处的对比。遇到比自己小的放到自己前面去。循环序号+。比自己大的放到当前排序子数组的最后面去,循环序号不变。直到排列完成。这种方法的缺点是即使是一个有序数组。它也会重新排。第二种方法是除了标记位,再设置一个对比位。遇到比自己小的,放到前面去,标记位的位置+,标记位与对比位之间所有的往后面移动一个位置。遇到比自己大的。标记位不变,对比位+。这种方法的缺点是对数组进行的操作太多。优点是对有序数组不会再排。方式一:functionquickSort(arr,a,b,qArr){varlen=arr.length,leftArr=,tag,i,k,len_l,len_r,lb,ra,temp;if(a==undefined&&b==undefined){a=;b=arr.length-;//初始化起始位置。}if(qArr==undefined){qArr=arr.slice();}if((len==&&arr)||len《){returnarr;}tag=qArr;for(i=;i《len;){if(qArr《=tag){leftArr.push(qArr);qArr;qArr=tag;k=a+i;i++;}else{if(leftArr.length+rightArr.length==len-){break;}temp=qArr;qArr;qArr=temp;rightArr.push(temp);k=a+i-;}this.pushHis(qArr.slice(),a,b,k);}len_l=leftArr.length;len_r=rightArr.length;if(len_l==){lb=a;}else{lb=a+len_l-;this.sort(leftArr,a,lb,qArr);}if(len_r==){ra=b;}else{ra=b+-len_r;this.sort(rightArr,ra,b,qArr)}returnqArr}方式二:functionquickSort(arr,a,b,qArr){varlen=arr.length,leftArr=,tag,i,j,k,temp,len_l,len_r,lb,ra;if(a==undefined&&b==undefined){a=;b=arr.length-;//初始化起始位置。}if(qArr==undefined){qArr=arr.slice();}if(len《){returnarr;}if(len==&&arr){returnarr;}tag=qArr;for(i=,k=;i《len;){if(qArr》=tag){rightArr.push(qArr);i++;}else{temp=qArr;for(j=a+i;j》a+k;j--){qArr;//this.pushHis(qArr.slice(),a,b,a+k);}qArr=temp;leftArr.push(temp);k++;i++;}this.pushHis(qArr.slice(),a,b,a+k,i-);}len_l=leftArr.length;len_r=rightArr.length;if(len_l==){lb=a;}else{lb=a+len_l-;this.sort(leftArr,a,lb,qArr);}if(len_r==){ra=b;}else{ra=b+-len_r;this.sort(rightArr,ra,b,qArr)}returnqArr;}具体的不同下面会有动画演示。问题四:动画的流畅。排序动画的DOM操作是很多的很快的。这里我做的优化只是让每一个排序步骤只涉及一个DOM操作。全部由JavaScript拼接好,一次替换。类似下面的代码。效果图:主要实现了:冒泡排序JavaScript动画演示插入排序JavaScript动画演示选择排序JavaScript动画演示快速排序JavaScript动画演示归并排序JavaScript动画演示希尔排序JavaScript动画演示

  ⒏求和如下内容有关的资源!

  ⒐关于进一步实施《算法与数据结构》课程改革的构想作者:傅清祥更新日期:--出处:福州大学计算机系关于进一步实施《算法与数据结构》课程改革的构想福州大学数学与计算机科学学院傅清祥从闽教高号和号两个文件获悉,由我主持申报的《算法与数据结构》只获得省级精品课程建设的立项,未能获得省级精品课程的挂牌。前者是对该课程几年来取得的成绩的肯定,而后者说明该课程还存在着差距,还需要努力,需作进一步的改革和建设。为了使《算法与数据结构》经过立项建设能达到省级精品课程甚至更高的水准,我们认真地对照了省教育厅关于精品课程的要求,根据现代教育理念、课程和教学改革的指导思想、以及现代教育技术,提出了以下进一步实施改革和建设的构想。.拓宽思路,打破室、系、院的界限,在校教务处和有关院系的支持下,动员全校范围内教同一门课程的更多教师,组织起课程改革的研讨与实施的队伍,群策群力,互帮互促,分工合作,在把《算法与数据结构》建成省级精品课程的同时,造就该课程全校性的一支稳定的、高质量的师资梯队。大家都知道,要实实在在地把一门课建成精品课程是一项工程,如下面所设想的,有大量艰苦细致的工作要做。可是,现在学生与教师人数比是那么大,教师编制是那么紧,以致象我们计算机系这样的大系,《算法与数据结构》的任课教师也只能安排-人。这-名的教师既要搞好日常的教学,又要承担深化改革,建设精品课程的全部任务。这是很难想象的,除非敷衍或弄虚作假。我想,在这种情况下,必须在做好改革和建设规划的前提下,打破室、系、院的教师界限,在全校范围内把教同一门课或相近课的教师动员起来,组织起来,作深入的研讨和细致的分工,让每位教师实事求是,量力而行,按照自己的专长和兴趣,只参与-项具体的改革和建设,把工作做实,做出成效,才能达到既不影响日常教学工作的质量,又完成精品课程的建设任务,两全其美。事实上,在我们福州大学,开《算法与数据结构》或相近课的,除我们计算机系外,还有数学系、工程技术学院、Napier学院、阳光学院、成人教育学院(将来还有至诚学院等。在这些院系,该课程也都有改革与建设的任务。与其各自为战,不如组织起来,统筹规划,平衡荷载,各显其能,分工合作。如果我们组织得好,既能把改革做实、做深、做透,把成绩做大,又能避免重复建设、重复投资,且受益面大。此外,由于组织起来,有了团队,有了规模,共同的兴趣和共同的价值取向将产生集体的氛围,便于开展许多集体活动,比如教学研讨,资源和经验的交流,老中青的传帮带,邀请国内外同行专家来校讲学、传经、培训,还有合作承担与《算法与数据结构》课程密切相关的软件工程项目的开发和计算理论科研课题的研究,形成教学科研型的队伍。这些都将对师资水平的提高,队伍的稳定起十分重要的作用。它们将与精品课程建设的实践一起造就福州大学的一支稳定的、高质量的师资梯队。.再版《算法与数据结构》教材,更新教材的内容,更新教材的结构,而且使教材多样化、立体化,不仅要有纸质版的主教本,还要有教师用的教学指导书,学生用的实践指导书和习题解析;还要提供配套的课堂教学分级ppt和多媒体课件。王晓东教授和我合编的《算法与数据结构》在年已出了第二版,后来又印了多次。但它根据的是ACM和IEEE推荐的《》和我国计算机学会推荐的《教程》。如今,ACM和IEEE又推出了《》,我国计算机学会也相应推出了《c》。推出计算学科的这些新的教程和知识体系构成,主要是为了适应近十年来计算学科本身的迅速发展和变化(特别是技术的发展和变化,以及随之产生的文化的发展变化和教育观念、教育方法与方式的发展变化,以保持计算学科教育的科学性、系统性和先进性。因此,作为计算学科知识体系主干的《算法与数据结构》课程从内容、结构到形式都必须根据《》和《c》进行更新,以满足新世纪的要求,和国际接轨。如《c》所指出的,计算学科的教育,从本科生开始,需要努力摆脱以外延发展为主的专业(职业教育方式,坚决地走内涵发展的道路,即第一,需要加强基础理论的教育,强化学生“计算思维能力”的训练;第二,选择最佳的知识载体,循序渐进地为学生传授包括基本问题求解过程和基本思路在内的学科方法论,而将一些流行系统和工具作为学生学习过程中的实践环境和学生自我扩展的内容来处理;第三,在强调基础的同时,注意适时、适当地提升教学中的一些基础内容,以满足学科发展的要求。我们将遵循这些原则来指导《算法与数据结构》教材的再版。.在-学年的寒假结束之前完成对教材(王晓东教授和我合编的《算法与数据结构》第二版中适用于本科的那些章节的数据结构和算法可视化演示系统的修改和封装,并在春季开设的级《算法与数据结构》课堂教学中推广使用。该系统充分运用计算机动画技术,形象、直观、生动地呈现各种常见的ADT和关于串、排序、图的基本算法,特别在表现算法的递归技巧和算法设计的增量法、关联法、贪心法、逐步逼近法等方面都有自己的创新,使它们变得很容易理解,很容易掌握,达到节省时间又有大收效的目的。我们将在此成果的基础上,开发与再版的《算法与数据结构》配套的多媒体课件,使教学内容更加直观、形象、生动、有声有色,而且可交互,激发学生各感观,引起学生的兴趣,让学生参与其中,调动学生的学习积极性和创造潜力,实现效果的最大化。、广泛收集各种题型的练习题,丰富已有的《算法与数据结构》习题库,支持任课教师平时的作业布置;开展题库科学化与智能化管理、运作的研究,逐步实现期中考试和期末考试的自动组卷和半自动评卷,切实做到教考分离,减轻教师命题和评卷的工作负担,让老师有更多的时间和精力从事创造性的工作;同时为学生通过网络访问,进行知识和能力自我测试,提供试卷和测试,以及在测试后提供参考答案。、启动课程网站的建设。建设课程网站的目的和要求首先是运用现代信息技术,适应教育理念从“知识传授”到“导致学习交流”的变化,给学生提供一个课程学习交流的舞台,让学生在这个舞台上成为主角,既可以是学生,也可以当教师,不受时间和空间的限制,无拘无束,自由自在,个性化地学习。其次是分别为学生和任课教师提供尽量多的课程教学资料、多媒体课件和教学示范等,方便学生和教师按需选用。第三,为教师提供一个教学文件交流、教学方法交流、教学经验交流和对教学中遇到的具体问题进行研讨的园地,让任课教师之间互相学习,取长补短,共同提高,开拓免费师资培训的渠道。第四,为学生提供网上答疑,解除传统答疑受时间地点等因素的限制。这在大学城初建、许多环境条件有待逐步配备的今天,更有特别的意义。第五,在试题库建设的支撑下,设立网上考场,支持学生对课程学习效果的自我测试,给学生本人提供反馈信息,以便控制、调整进一步学习的计划和过程。第六、开辟求助热线,邦助在个性化学习过程中的学生解决一些特殊的困难。第七,通过网站举办课程高级专题的讲座,满足学有余力的学生的需求。第八,呈现课程改革和建设的成果,扩大受益面,同时广泛收集学生对课程改革和建设的反馈意见和要求,使精品课程的建设始终以学习者为中心,为学习者服务。、在我校级综合班做全程讨论式的课程教学改革试验。从年月日《南方周末》的A版上读到一篇题为《美国一流大学的理念》的文章。此文是冲着北大最近的激烈变革发的。作者是一位在北大读完本科留美的学者。文中有两段话引起我的强烈共鸣。其中一段话说:“一位西方教育家讲过,大学的本质在于把一群优异的年青人聚在一起,让他们的创造力互相激励,产生使他们终身受益的智慧。所以,教授是哪里的博士,出了多少专著,还在次要。重要的是,大学的教学,怎么为年青人创造一种更有成效的互相激发智慧和创造力的环境。”紧接着又一段说:“这一基本精神,和中国大学的精神就很不一致。中国大学是传播知识,我讲你听,好好地记笔记,好好考试。本科年大课一上到底。很少有讨论班,很少写期末论文。知识不少,创造力贫乏,出来常常适应不了社会。”前一段是在褒扬美国一流大学的办学理念,后一段是在贬责中国一流大学在办学理念上的缺损。本人都很赞同,因为本人也有过同样的感触。不过,实行讨论班式的教学要有条件,第一,就如所引第一段话中所说的,学生要是”一群优异的年青人”;第二,学生班的人数要少。后来,我又在《散文(海外版)》年第期上读到一篇文章,题目是《牛津的魅力》,说到牛津大学和剑桥大学教学的最大特点,其实质是与美国一流大学有着同样的办学理念.可见,国际上的一流大学之所以能成为一流,原因就在这里.中国一流大学想冲出亚洲,走向世界,确实要好好向国际上的一流大学学习。他们最有学好的前提条件,因为他们的牌子响,全国的优等生都往那里报考,他们录取的学生都算得上是优异的年青人。另外,他们的教师编制富余,使得他们的学生班有可能分得很小。联系到我们福州大学,虽然离中国一流大学还很远,还在从教学型向教学科研型过渡,学习美国一流大学的前提条件还没具备,因为我们的生源还不那么好,录取的学生还不都是优异的年青人。但是,我想我们也应该学习,因为我们毕竟也能招收到一些优异的年青人,我们至少可以让这部分优异的年青人的创造力互相激励,产生使他们终身受益的智慧,最大化我们福州大学对社会的贡献。所幸的是,学校新一届领导班子上任后,经过调查研究,迅速地作出了复办综合班的正确决定,并且拨出专款给予支持。这将为我校也学习国际一流大学提供一个局部环境,为提高我校办学水平开辟一个能起辐射作用的“特区”。我们想把它作为改革的试点。首先,一改老师在台上讲学生在台下听的传统课堂教学方式,办成讨论班。老师起引导和协调的作用,在讨论前,抛出一些问题;在讨论中也参加面对面的思想交锋;在讨论后,作一个简要的小结,并为下一次讨论伏笔。老师还要起”记者”的作用,及时准确地发现学生的创新表现并给予表彰。创新有大有小,时有时无,我们不能要求每一位学生一下子就有大创新,也不能要求每位学生时时事事有创新。对每一位学生,只要有创新,不论大小都应该及时给予肯定,有一项肯定一项,有两项肯定两项。及时发现和表彰学生的创新点太重要了。我有当学生得到表彰受到激励的体验,也有当老师表彰学生从而使学生受到激励的经历。对综合班的学生,不必考试,免去考试的负担,让读书和研究成为一种乐趣。课程成绩就由平时的创新表现和期末论文的优劣综合评定。评定的依据和结果全部公开。要突破传统的课堂教学方式,把一言堂的课堂变成群言堂的论坛,让优异的年青人的思想自由碰撞,对学生是一种挑战,对老师也是一种挑战,因而,这种课堂教学方式也将是培养和锻练教师的好方式。、加强实践教学环节,突出能力培养。《算法与数据结构》是一门实践性很强的课程,其实践性表现在从实际问题到数学问题的抽象中,在对问题所涉及到的对象的分析归纳、提取概念、引入符号、透视性质、推测命题、证明定理中,在算法与数据结构设计、实现解题的过程中,在算法复杂性的阶的估计中,以及它们的推广应用中,等等。我们加强实践教学,拟采取如下措施:首先是除原计划的实践教学时间外,把由于采用多媒体课件提高了教学效率而省下来的时间添加给实践环节;其次是做好实践教学的组织和安排,开出习题示范课和练习评讲课。第三,在题库建设的支持下,精选课程作业习题,循序渐进,从简单到复杂,从单一到综合,从模仿到创新。每章结束时有章的综合作业,课程结束时有课程的综合作业。第四,组织学生积极参加每年一次的校级程序设计大赛和ACM国际大学生程序设计组队选拔赛。以上七条算是初步的构想,虽然还比较粗,但都不是口号,而是实打实的实事,而且很明显,要切实做下去并把它们做好,工作量和工作难度都非常之大。因此,这当中特别需要各级领导的指导(包括对本构想的指导和多方面(包括编制、经费的支持,以及《算法与数据结构》课程建设项目组全体同仁的齐心协力。

您可能感兴趣的文章:

相关文章