之所謂高級語言人們好像沒有用它做一些低級算法考量,經典的排序算法都在c語言當中,下面我對
雙向冒泡排序
桶排序
梳排序
循環排序
侏儒排序
堆排序
插入排序
合並排序
奇偶排序
亭子間排序
快速排序
兼有快速排序和冒泡排序
選擇排序
shell 排序
一一進行講解
首先我們要寫一個可視化動畫組件來顯示排序的過程
每個算法都有自己的方法命名的排序算法的名稱和接受 IList的
參數,返回 IList的
對象。
方法DrawSamples是通過變量隨機數來顯示所有算法
- private void DrawSamples()
- {
- g.Clear(Color.White);
-
- for (int i = 0; i < array.Count; i++)
- {
- int x = (int)(((double)pnlSamples.Width / array.Count) * i);
-
- Pen pen = new Pen(Color.Black);
- g.DrawLine(pen, new Point(x, pnlSamples.Height), new Point(x, (int)(pnlSamples.Height - (int)array[i])));
- }
- }
方法Randomize負責所有數據隨機樣本
- public void Randomize(IList list)
- {
- for (int i = list.Count - 1; i > 0; i--)
- {
- int swapIndex = rng.Next(i + 1);
- if (swapIndex != i)
- {
- object tmp = list[swapIndex];
- list[swapIndex] = list[i];
- list[i] = tmp;
- }
- }
- }
在排序創建動畫時復選框被選中後,圖像每兩個示例數組列交換產生。這個圖像是索引從0到n,其中n代表swappings當前數目。
- private void SavePicture()
- {
- ImageCodecInfo myImageCodecInfo = this.getEncoderInfo("image/gif");
- EncoderParameter myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW);
- EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0L);
- EncoderParameters myEncoderParameters = new EncoderParameters(1);
- EncoderParameters encoderParams = new EncoderParameters(2);
- encoderParams.Param[0] = qualityParam;
- encoderParams.Param[1] = myEncoderParameter;
- string destPath = System.IO.Path.Combine(txtOutputFolder.Text, imgCount + ".gif");
- bmpsave.Save(destPath, myImageCodecInfo, encoderParams);
- imgCount++;
- }