Exemple #1
0
        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();
            }
        }
Exemple #2
0
        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();
        }