C# 动态可视排序算法


之所谓高级语言人们好像没有用它做一些低级算法考量,经典的排序算法都在c语言当中,下面我对

双向冒泡排序

桶排序

梳排序

循环排序

侏儒排序

堆排序

插入排序

合并排序

奇偶排序

亭子间排序

快速排序

兼有快速排序和冒泡排序

选择排序

shell 排序

一一进行讲解

首先我们要写一个可视化动画组件来显示排序的过程

每个算法都有自己的方法命名的排序算法的名称和接受 IList的 参数,返回 IList的 对象。

方法DrawSamples是通过变量随机数来显示所有算法

 
  1. private void DrawSamples()  
  2. {  
  3.     g.Clear(Color.White);  
  4.               
  5.     for (int i = 0; i < array.Count; i++)  
  6.     {  
  7.         int x = (int)(((double)pnlSamples.Width / array.Count) * i);  
  8.                   
  9.         Pen pen = new Pen(Color.Black);  
  10.         g.DrawLine(pen, new Point(x, pnlSamples.Height), new Point(x, (int)(pnlSamples.Height - (int)array[i])));  
  11.     }  
  12. }  

 方法Randomize负责所有数据随机样本

 
  1. public void Randomize(IList list)  
  2. {  
  3.     for (int i = list.Count - 1; i > 0; i--)  
  4.     {  
  5.         int swapIndex = rng.Next(i + 1);  
  6.         if (swapIndex != i)  
  7.         {  
  8.             object tmp = list[swapIndex];  
  9.             list[swapIndex] = list[i];  
  10.             list[i] = tmp;  
  11.         }  
  12.     }  
  13. }  

在排序创建动画时复选框被选中后,图像每两个示例数组列交换产生。这个图像是索引从0到n,其中n代表swappings当前数目。

 
  1. private void SavePicture()  
  2. {  
  3.     ImageCodecInfo myImageCodecInfo = this.getEncoderInfo("image/gif");   
  4.     EncoderParameter myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW);  
  5.     EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0L);  
  6.     EncoderParameters myEncoderParameters = new EncoderParameters(1);  
  7.     EncoderParameters encoderParams = new EncoderParameters(2);  
  8.     encoderParams.Param[0] = qualityParam;  
  9.     encoderParams.Param[1] = myEncoderParameter;  
  10.     string destPath = System.IO.Path.Combine(txtOutputFolder.Text, imgCount + ".gif");  
  11.     bmpsave.Save(destPath, myImageCodecInfo, encoderParams);  
  12.     imgCount++;  
  13. }  

相关内容