Loading

快速排序与冒泡排序效率对比

  1 //C# Code
  2 
  3 using System;
  4 using System.Collections.Generic;
  5 using System.Linq;
  6 using System.Text;
  7 using System.Timers;
  8 
  9  
 10 
 11 namespace QuickSort
 12 {
 13     class Program
 14     {
 15         private static int UsedTime = 0;
 16         private static Random Seed = new Random();//Random Seed
 17 
 18  
 19 
 20         /// <summary>
 21         /// SortMethod
 22         /// </summary>
 23         /// <param name="arr">NumArray</param>
 24         /// <param name="begin">FirstIndex</param>
 25         /// <param name="end">LastIndex</param>
 26         /// <param name="isRandomKey">IsRandomKey</param>
 27         private static void QuickSort(int[] arr,int begin,int end,bool isRandomKey)
 28         {
 29             //The leftindex less than the rightindex,the sorting isn't complete.
 30             if (begin < end)
 31             {
 32                 int i = begin - 1, j = end + 1, key;
 33                 if (!isRandomKey)
 34                     key = arr[(begin + end) / 2];
 35                 else
 36                     key = arr[Seed.Next(begin, end)];
 37 
 38                 while (true)
 39                 {
 40                     while (i < end && arr[++i] < key) ;
 41                     while (j > 0 && arr[--j] > key) ;
 42 
 43                     if (i >= j)
 44                         break;
 45                     Swap(arr, i, j);
 46                 }
 47                 QuickSort(arr, begin, i - 1,isRandomKey);//Left part recursion.
 48                 QuickSort(arr, j + 1, end,isRandomKey);//Right part recursion.
 49             }
 50         }//end SortMethod
 51 
 52         /// <summary>
 53         /// SortMethod
 54         /// </summary>
 55         /// <param name="arr">NumArray</param>
 56         private static void BubbleSort(int[] arr)
 57         {
 58             int i,j;
 59             for (i = 0; i < arr.Length - 1; i++)
 60             {
 61                 for (j = 0; j < arr.Length - 1 - i; j++)
 62                 {
 63                     if (arr[j] > arr[j + 1])
 64                     {
 65                         Swap(arr,j,j+1);
 66                     }
 67                 }
 68             }
 69         }//end SortMethod
 70 
 71         /// <summary>
 72         /// Swap variables' values
 73         /// </summary>
 74         /// <param name="arr">Array</param>
 75         /// <param name="i">Current left index</param>
 76         /// <param name="j">Current right index</param>
 77         private static void Swap(int[] arr, int i, int j)
 78         {
 79             int temp = arr[i];
 80             arr[i] = arr[j];
 81             arr[j] = temp;
 82         }//end method
 83 
 84         //TimerEventMethod
 85         private static void TimerEvent(object source, ElapsedEventArgs e)
 86         {
 87             UsedTime++;
 88         }
 89 
 90  
 91 
 92         static void Main(string[] args)
 93         {
 94             int ArrLen = 0;//Array length
 95 Reinput:
 96             Console.Write("Please input array length:");
 97             if (!int.TryParse(Console.ReadLine(), out ArrLen))
 98             {
 99                 Console.WriteLine("Error input !");
100                 goto Reinput;
101             }
102 
103 
104             int[] NumArr = new int[ArrLen];
105             int[] NumArr_2 = new int[NumArr.Length];
106 
107 
108             Console.WriteLine("Assignment values ...");
109             for (int i = 0; i < NumArr.Length; i++)//Assign values
110             {
111                 NumArr[i] = Seed.Next(-1000, 1000);
112             }
113             Console.WriteLine("Assignment to complete.");
114 
115  
116 
117             Console.WriteLine("\nCopying array to array2 ...");
118             for (int i = 0; i < NumArr.Length; i++)//Copy array
119             {
120                 NumArr_2[i] = NumArr[i];
121             }
122             Console.WriteLine("Copy completed.");
123 
124  
125 
126             /*//Cancel the notes to output datas
127             Console.Write("Before Sort:");
128             foreach(int a in NumArr)
129                 Console.Write("{0} ",a);
130              */
131 
132 
133             Timer t = new Timer();//Create a timer to calculate used time.
134             t.Elapsed += new ElapsedEventHandler(TimerEvent);
135             t.Interval = 1;
136             UsedTime = 0;
137             Console.Write("\nBegin QuickSorting , please wait ......");
138             t.Start();
139             QuickSort(NumArr, 0, NumArr.Length - 1, false);
140             t.Stop();
141             t.Close();
142 
143 
144             /*//Cancel the notes to output datas
145             Console.Write("\n\n\nAfter Sorted:");
146             foreach(int a in NumArr)
147                 Console.Write("{0} ",a);
148              */
149             Console.WriteLine("\nQuickSorting is Complete. Used time : {0} msec.",UsedTime);
150 
151  
152 
153             t = new Timer();//Create a timer to calculate used time.
154             t.Elapsed += new ElapsedEventHandler(TimerEvent);
155             t.Interval = 1;
156             UsedTime = 0;
157             Console.Write("\nBegin BubbleSorting , please wait ......");
158             //Console.Write("\nBegin RandomQuickSorting ......");
159             t.Start();
160             BubbleSort(NumArr_2);
161             //QuickSort(NumArr_2, 0, NumArr_2.Length - 1, true);
162             t.Stop();
163             t.Close();
164 
165 
166             /*//Cancel the notes to output datas
167             Console.Write("\n\n\nAfter Sorted:");
168             foreach(int a in NumArr_2)
169                 Console.Write("{0} ",a);
170              */
171             Console.WriteLine("\nBubbleSorting is Complete. Used time : {0} msec.",UsedTime);
172             //Console.WriteLine("\nRandomQuickSorting is Complete. Used time : {0} msec.",UsedTime);
173 
174             Console.ReadLine();
175         }//end Main()
176     }//end class
177 }//end namespace

//欢迎转载,请注明原创,感谢

posted @ 2012-07-26 17:52  __Meow  阅读(323)  评论(0编辑  收藏  举报