public static void TestSlowSort() { while (true) { int size = Utils.InputLoopInt("Input the size of the test array: "); float[] source = Utils.RandomArray(size); Sorting.SlowSort(source, Sorting.Ascending); Utils.WriteArray(source); Utils.ConsoleHang(); } }
public static void Benchmark() { string[] files = Utils.ParseDirectory(Utils.InputLoopDirPath(DIRECTORY_MESSAGE)); List <string> fileNamesSort = new List <string>(); List <string> fileNamesSearch = new List <string>(); List <int[]> searchIndexs = new List <int[]>(); List <SortingStatistics> sortingStatistics = new List <SortingStatistics>(); List <SearchingStatistics> searchingStatistics = new List <SearchingStatistics>(); for (int i = 0; i < files.Length; i++) { Console.WriteLine(Path.GetFileName(files[i])); float[] values = Utils.ParseFile(files[i]); float[] workerValues = new float[values.Length]; #region Sort #region MergeSort Console.WriteLine("MergeSort"); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.MergeSort(workerValues, Sorting.Ascending); sortingStatistics.Add(Sorting.Instance.GetStatistics); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.MergeSort(workerValues, Sorting.Descending); sortingStatistics.Add(Sorting.Instance.GetStatistics); #endregion #region QuickSort Console.WriteLine("QuickSort"); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.QuickSort(workerValues, Sorting.Ascending); sortingStatistics.Add(Sorting.Instance.GetStatistics); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.QuickSort(workerValues, Sorting.Descending); sortingStatistics.Add(Sorting.Instance.GetStatistics); #endregion #region BubbleSort Console.WriteLine("BubbleSort"); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.BubbleSort(workerValues, Sorting.Ascending); sortingStatistics.Add(Sorting.Instance.GetStatistics); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.BubbleSort(workerValues, Sorting.Descending); sortingStatistics.Add(Sorting.Instance.GetStatistics); #endregion #region HeapSort Console.WriteLine("HeapSort"); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.HeapSort(workerValues, Sorting.Ascending); sortingStatistics.Add(Sorting.Instance.GetStatistics); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.HeapSort(workerValues, Sorting.Descending); sortingStatistics.Add(Sorting.Instance.GetStatistics); #endregion #region SlowSort if (workerValues.Length <= 256) { Console.WriteLine("SlowSort"); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.SlowSort(workerValues, Sorting.Ascending); sortingStatistics.Add(Sorting.Instance.GetStatistics); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.SlowSort(workerValues, Sorting.Descending); sortingStatistics.Add(Sorting.Instance.GetStatistics); } #endregion #region MathMaticaSort if (workerValues.Length <= 64) { Console.WriteLine("MathMaticaSort"); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.MathMaticaSort(workerValues, Sorting.Ascending); sortingStatistics.Add(Sorting.Instance.GetStatistics); fileNamesSort.Add(Path.GetFileName(files[i])); Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.MathMaticaSort(workerValues, Sorting.Descending); sortingStatistics.Add(Sorting.Instance.GetStatistics); } #endregion #endregion #region Search Utils.CopyArray(values, workerValues, values.Length); Sorting.Instance.ResetCounters(); Sorting.MergeSort(workerValues, Sorting.Ascending); float firstSearchValue = workerValues[Utils.Instance.Random.Next(0, workerValues.Length)]; float boundSearchValue = Utils.MostCommonValue(workerValues); float nearestSearchValue = ((workerValues[Utils.Instance.Random.Next(0, workerValues.Length)] + workerValues[Utils.Instance.Random.Next(0, workerValues.Length)]) / 2) + ((float)Utils.Instance.Random.NextDouble() * workerValues[Utils.Instance.Random.Next(0, workerValues.Length)]); #region LinearSearch Console.WriteLine("LinearSearch"); fileNamesSearch.Add(Path.GetFileName(files[i])); Searching.Instance.ResetCounters(); searchIndexs.Add(new int[] { Searching.LinearSearch(workerValues, firstSearchValue) }); searchingStatistics.Add(Searching.Instance.GetStatistics); fileNamesSearch.Add(Path.GetFileName(files[i])); Searching.Instance.ResetCounters(); searchIndexs.Add(Searching.LinearSearchBounds(workerValues, boundSearchValue)); searchingStatistics.Add(Searching.Instance.GetStatistics); fileNamesSearch.Add(Path.GetFileName(files[i])); Searching.Instance.ResetCounters(); searchIndexs.Add(new int[] { Searching.LinearSearchNearest(workerValues, nearestSearchValue) }); searchingStatistics.Add(Searching.Instance.GetStatistics); #endregion #region BinarySearch Console.WriteLine("BinarySearch"); fileNamesSearch.Add(Path.GetFileName(files[i])); Searching.Instance.ResetCounters(); searchIndexs.Add(new int[] { Searching.BinarySearch(workerValues, firstSearchValue) }); searchingStatistics.Add(Searching.Instance.GetStatistics); fileNamesSearch.Add(Path.GetFileName(files[i])); Searching.Instance.ResetCounters(); searchIndexs.Add(Searching.BinarySearchBounds(workerValues, boundSearchValue)); searchingStatistics.Add(Searching.Instance.GetStatistics); fileNamesSearch.Add(Path.GetFileName(files[i])); Searching.Instance.ResetCounters(); searchIndexs.Add(new int[] { Searching.BinarySearchNearest(workerValues, nearestSearchValue) }); searchingStatistics.Add(Searching.Instance.GetStatistics); #endregion #endregion Console.WriteLine(); } int count = 0; StreamWriter file = new StreamWriter(@"benchmark.txt"); foreach (SortingStatistics stats in sortingStatistics) { file.WriteLine(fileNamesSort[count++]); file.WriteLine(stats.Sort); file.WriteLine(stats.Order); file.WriteLine(stats.Comparisons); file.WriteLine(stats.Itterations); file.WriteLine(stats.Recursions); file.WriteLine(stats.Swaps); file.WriteLine(""); } count = 0; foreach (SearchingStatistics stats in searchingStatistics) { file.WriteLine(fileNamesSearch[count]); file.WriteLine(stats.Search); file.WriteLine(stats.Value); file.WriteLine(searchIndexs[count].Length < 2 ? searchIndexs[count][0].ToString() : string.Format("{0}, {1}", searchIndexs[count][0], searchIndexs[count][1])); file.WriteLine(stats.Comparisons); file.WriteLine(stats.Itterations); file.WriteLine(""); count++; } file.Close(); }