using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Diagnostics;
namespace Sort
{
class Program
{
static void Main(string[] args)
{
//Test(5);
EfficiencyTest(100000,10,"BubbleSorter");
}
//<生成隨機數GenerateRandomNumber>
public static List<int> GenerateRandomNumber(int Length)
{
List<int> newRandom = new List<int>();
Random rd = new Random();
for (int i = 0; i < Length; i++)
{
newRandom.Add(rd.Next());
}
return newRandom;
}
//測試排序算法的正確性
private static void Test(int n)
{
int[] de = GenerateRandomNumber(n).ToArray();
Console.WriteLine("排序前:");
foreach (int dee in de)
{
Console.WriteLine(dee);
}
//int[] d = MergeSorter.Sort(de);
//int[] d=HeapSorter.Sort(de);
//int[] d = ShellSorter.Sort(de);
//int[] d = InsertSorter.Sort(de);
//int[] d = SelectSorter.Sort(de);
//int[] d = CockTailSorter.Sort(de);
int[] d = BubbleSorter.Sort(de);
Console.WriteLine("排序後:");
foreach (int dee in d)
{
Console.WriteLine(dee);
}
//Console.ReadKey();
}
//測試各個排序算法效率//調用Name函數排序i個數j次
private static void EfficiencyTest(int i,int j,string Name)
{
double AverageTime = 0; ;
string Cname = null;
for (int n = 0; n < j;n++)
{
int[] de = GenerateRandomNumber(i).ToArray();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
DateTime dateStart = DateTime.Now;
switch(Name)
{
case "MergeSorter":
MergeSorter.Sort(de);
Cname = "MergeSorter";
break;
case "HeapSorter":
HeapSorter.Sort(de);
Cname = "HeapSorter";
break;
case "ShellSorter":
ShellSorter.Sort(de);
Cname = "ShellSorter";
break;
case "InsertSorter":
InsertSorter.Sort(de);
Cname = "InsertSorter";
break;
case "SelectSorter":
SelectSorter.Sort(de);
Cname = "SelectSorter";
break;
case "CockTailSorter":
CockTailSorter.Sort(de);
Cname = "CockTailSorter";
break;
case "BubbleSorter":
BubbleSorter.Sort(de);
Cname = "BubbleSorter";
break;
case "QuickSorter":
QuickSorter.Sort(de);
Cname = "QuickSorter";
break;
}
stopwatch.Stop();
AverageTime = (DateTime.Now - dateStart).TotalMilliseconds;
}
Double span = AverageTime / j;
Console.WriteLine(Cname + "排序" + i + "個數" + j + "次所用平均時間為:" + span + " 毫秒");
Console.ReadKey();
}
}
}