●●● 引言首先,我认为是最重要的是要理解什么是“排序算法”。根据维基百科,排序算法(Sortingalgorithm)是一种能将一串数据依照特定排序方式进行排列的一种算法。最常用到的排序方式是数值顺序以及字典顺序。有效的排序算法在一些算法(例如搜索算法与合并算法)中是重要的,如此这些算法才能得到正确解答。排序算法也用在处理文字数据以及产生人类可读的输出结果。 冒泡排序 梳排序 圈排序 地精排序 堆排序 归并排序 快速排序 选择排序 希尔排序 ●●● 使用代码该解决方案由两个项目组成。第一个项目称为组件提供的创建GIF动画图像类。该项目是基于NGIF项目的。 第二个项目可以称为排序比较,它是解决方案的主要组成部分。其中,通过一个名为frmMain的结构可以选择排序算法,设置你想要排序,排序的速度,排序数量,并选择是否要创建动态图片。在窗体上放置两个面板称为pnlSort1和pnlSort2,其中分拣可视化的呈现方式。 每个算法都都通过自己的排序方式进行命名,并接受一个IList参数,并返回一个IList对象。 DrawSamples方法可以在面板上进行绘图。产生的随机样本之后就会调用它。通过点击随机按钮生成的样本会保存在数组中。 privatevoidDrawSamples{g.Clear(Color.White);for(inti=0;ilt;array.Count;i++){intx=(int)(((double)pnlSamples.Width/array.Count)*i);Penpen=newPen(Color.Black);g.DrawLine(pen,newPoint(x,pnlSamples.Height),newPoint(x,(int)(pnlSamples.Height-(int)array[i])));}} 该方法随机产生数据放于数组中。 publicvoidRandomize(IListlist){for(inti=list.Count-1;i0;i--){intswapIndex=rng.Next(i+1);if(swapIndex!=i){objecttmp=list[swapIndex];list[swapIndex]=list[i];list[i]=tmp;}}} 在排序过程中,当复选框创建的动画被选中,数组中两个数交换的话就会产生图像。此图像索引从0到n,其中n代表交换的次数。 privatevoidSavePicture{ImageCodecInfomyImageCodecInfo=this.getEncoderInfo("image/gif");EncoderParametermyEncoderParameter=newEncoderParameter(System.Drawing.Imaging.Encoder.Compression,(long)EncoderValue.CompressionLZW);EncoderParameterqualityParam=newEncoderParameter(System.Drawing.Imaging.Encoder.Quality,0L);EncoderParametersmyEncoderParameters=newEncoderParameters(1);EncoderParametersencoderParams=newEncoderParameters(2);encoderParams.Param[0]=qualityParam;encoderParams.Param[1]=myEncoderParameter;stringdestPath=System.IO.Path.Combine(txtOutputFolder.Text,imgCount+".gif");bmpsave.Save(destPath,myImageCodecInfo,encoderParams);imgCount++;} ●●● 排序算法冒泡排序 冒泡排序也被称为下沉排序,是一个简单的排序算法,通过多次重复比较每对相邻的元素,并按规定的顺序交换他们,最终把数列进行排好序。一直重复下去,直到结束。该算法得名于较小元素“气泡”会“浮到”列表顶部。由于只使用了比较操作,所以这是一个比较排序。 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。但同样简单的插入排序比冒泡排序性能更好,所以有些人认为不需要再教冒泡排序了。 publicIListBubbleSort(IListarrayToSort){intn=arrayToSort.Count-1;for(inti=0;in;i++){for(intj=n;ji;j--){if(((IComparable)arrayToSort[j-1]).CompareTo(arrayToSort[j])0){objecttemp=arrayToSort[j-1];arrayToSort[j-1]=arrayToSort[j];arrayToSort[j]=temp;RedrawItem(j);RedrawItem(j-1);pnlSamples.Refresh;if(chkCreateAnimation.Checked)SavePicture;}}}returnarrayToSort;}Worstcaseperformance:O(n2)Bestcaseperformance:O(n)Averagecaseperformance:O(n2)Worstcasespace白癜风治疗的医院白癜风医院
|