static void Main(string[] args) { InsertionSort insertionSort = new InsertionSort(); SelectionSort selectionSort = new SelectionSort(); ShellSort shellSort = new ShellSort(); int n = 10000; // 高斯分布(正态分布) double[] arrayInsertion = SortCompare.GetNormalDistributionArray(n); double[] arraySelection = new double[n]; double[] arrayShell = new double[n]; arrayInsertion.CopyTo(arraySelection, 0); arrayInsertion.CopyTo(arrayShell, 0); Console.WriteLine("Normal Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Selection: " + SortCompare.Time(selectionSort, arraySelection)); Console.WriteLine("Shell: " + SortCompare.Time(shellSort, arrayShell)); // 泊松分布 arrayInsertion = SortCompare.GetPossionDistributionArray(n); arrayInsertion.CopyTo(arraySelection, 0); arrayInsertion.CopyTo(arrayShell, 0); Console.WriteLine("Poission Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Selection: " + SortCompare.Time(selectionSort, arraySelection)); Console.WriteLine("Shell: " + SortCompare.Time(shellSort, arrayShell)); // 几何分布 arrayInsertion = SortCompare.GetGeometricDistributionArray(n, 0.3); arrayInsertion.CopyTo(arraySelection, 0); arrayInsertion.CopyTo(arrayShell, 0); Console.WriteLine("Geometric Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Selection: " + SortCompare.Time(selectionSort, arraySelection)); Console.WriteLine("Shell: " + SortCompare.Time(shellSort, arrayShell)); // 离散分布 arrayInsertion = SortCompare.GetDiscretDistributionArray(n, new double[] { 0.1, 0.2, 0.3, 0.1, 0.1, 0.1, 0.1 }); arrayInsertion.CopyTo(arraySelection, 0); arrayInsertion.CopyTo(arrayShell, 0); Console.WriteLine("Discret Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Selection: " + SortCompare.Time(selectionSort, arraySelection)); Console.WriteLine("Shell: " + SortCompare.Time(shellSort, arrayShell)); }
static void Main(string[] args) { var insertionSort = new QuickSortInsertion(); var randomSort = new QuickSortRandomPivot(); var n = 5000000; // 高斯分布(正态分布) var arrayInsertion = SortCompare.GetNormalDistributionArray(n); var arraySelection = new double[n]; arrayInsertion.CopyTo(arraySelection, 0); Console.WriteLine("Normal Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Random Pivot: " + SortCompare.Time(randomSort, arraySelection)); Console.WriteLine(); // 泊松分布 arrayInsertion = SortCompare.GetPossionDistributionArray(n); arrayInsertion.CopyTo(arraySelection, 0); Console.WriteLine("Poission Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Random Pivot: " + SortCompare.Time(randomSort, arraySelection)); Console.WriteLine(); // 几何分布 arrayInsertion = SortCompare.GetGeometricDistributionArray(n, 0.3); arrayInsertion.CopyTo(arraySelection, 0); Console.WriteLine("Geometric Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Random Pivot: " + SortCompare.Time(randomSort, arraySelection)); Console.WriteLine(); // 离散分布 arrayInsertion = SortCompare.GetDiscretDistributionArray(n, new double[] { 0.1, 0.2, 0.3, 0.1, 0.1, 0.1, 0.1 }); arrayInsertion.CopyTo(arraySelection, 0); Console.WriteLine("Discret Distribution:"); Console.WriteLine("Insertion: " + SortCompare.Time(insertionSort, arrayInsertion)); Console.WriteLine("Random Pivot: " + SortCompare.Time(randomSort, arraySelection)); Console.WriteLine(); // 一半是 0 一半是 1 var arrayNormalInsertion = HalfZeroHalfOne(n); var arrayRandomPivot = new int[n]; arrayNormalInsertion.CopyTo(arrayRandomPivot, 0); Console.WriteLine("half 0 and half 1"); Console.WriteLine("Insertion:" + SortCompare.Time(insertionSort, arrayNormalInsertion)); Console.WriteLine("Random Pivot:" + SortCompare.Time(randomSort, arrayRandomPivot)); Console.WriteLine(); // 一半是 0, 1/4 是 1, 1/8 是 2…… arrayNormalInsertion = HalfAndHalf(n); arrayNormalInsertion.CopyTo(arrayRandomPivot, 0); Console.WriteLine("half and half and half ..."); Console.WriteLine("Insertion Sort:" + SortCompare.Time(insertionSort, arrayNormalInsertion)); Console.WriteLine("Random Pivot:" + SortCompare.Time(randomSort, arrayRandomPivot)); Console.WriteLine(); // 一半是 0,一半是随机 int 值 arrayNormalInsertion = HalfZeroHalfRandom(n); arrayNormalInsertion.CopyTo(arrayRandomPivot, 0); Console.WriteLine("half 0 half random"); Console.WriteLine("Insertion Sort:" + SortCompare.Time(insertionSort, arrayNormalInsertion)); Console.WriteLine("Random Pivot:" + SortCompare.Time(randomSort, arrayRandomPivot)); }