歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C# 動態可視排序算法

C# 動態可視排序算法

日期:2017/3/1 10:38:23   编辑:Linux編程

之所謂高級語言人們好像沒有用它做一些低級算法考量,經典的排序算法都在c語言當中,下面我對

雙向冒泡排序

桶排序

梳排序

循環排序

侏儒排序

堆排序

插入排序

合並排序

奇偶排序

亭子間排序

快速排序

兼有快速排序和冒泡排序

選擇排序

shell 排序

一一進行講解

首先我們要寫一個可視化動畫組件來顯示排序的過程

每個算法都有自己的方法命名的排序算法的名稱和接受 IList的 參數,返回 IList的 對象。

方法DrawSamples是通過變量隨機數來顯示所有算法

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

方法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. }

Copyright © Linux教程網 All Rights Reserved