2014年8月28日

[C#]排序方法比較

問題:
透過內建函式做排序真的會比較快嗎?

前言:
一般而言函式都是透過優化而產出的,所以理論上而言會是比較快。
但是一切都要透過驗證,所以做了以下實驗,透過一些方式做實驗發現...

Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { int[] arrayMax = new int[10000000]; int[] arrayMax2 = new int[10000000]; int[] arrayMax3 = new int[10000000]; for (int i = 0; i <= arrayMax.GetUpperBound(0); i++) { Random rnd = new Random(); arrayMax[i] = rnd.Next(); arrayMax2[i] = arrayMax[i]; arrayMax3[i] = arrayMax[i]; } /* * 方法一,use sort */ DateTime start2 = DateTime.Now; Console.WriteLine("Start:" + start2.ToString() + "\n"); Array.Sort(arrayMax2); Console.WriteLine("Max is:" + arrayMax2[arrayMax2.Length-1] + "\n"); Console.WriteLine("End:" + DateTime.Now.Subtract(start2) + "\n"); Console.WriteLine("*** next one ***\n"); /* * 方法二,迴圈尋找 */ DateTime start = DateTime.Now; Console.WriteLine("Start:" + start.ToString() + "\n"); Console.WriteLine("Max is:{0}\n", GetMax(ref arrayMax)); Console.WriteLine("End:" + DateTime.Now.Subtract(start) + "\n"); /* * 方法三,use sort and Reverse */ DateTime start3 = DateTime.Now; Console.WriteLine("Start:" + start3.ToString() + "\n"); Array.Sort(arrayMax3); Array.Reverse(arrayMax3); Console.WriteLine("Max is:" + arrayMax3[0] + "\n"); Console.WriteLine("End:" + DateTime.Now.Subtract(start3) + "\n"); Console.WriteLine("*** next one ***\n"); Console.Read(); } private static int GetMax(ref int[] arrayMax) { int i, max; max = arrayMax[0]; for (i = 0; i <= arrayMax.GetUpperBound(0); i++) { if (max < arrayMax[i]) { max = arrayMax[i]; } } return max; } } }
結果:
迴圈比較快...

備註:
End為執行的時間,如果驗證方式有誤,麻煩不吝指教。

沒有留言:

張貼留言