Exemplo n.º 1
0
        public static int[] Sort(this int[] variableArray, ArraySortType type)
        {
            int temp;

            for (int i = 0; i < variableArray.Length - 1; i++)
            {
                for (int j = i + 1; j < variableArray.Length; j++)
                {
                    switch (type)
                    {
                    case ArraySortType.Ascending:
                        if (variableArray[i] > variableArray[j])
                        {
                            temp             = variableArray[i];
                            variableArray[i] = variableArray[j];
                            variableArray[j] = temp;
                        }
                        break;

                    case ArraySortType.Descending:
                        if (variableArray[i] < variableArray[j])
                        {
                            temp             = variableArray[i];
                            variableArray[i] = variableArray[j];
                            variableArray[j] = temp;
                        }
                        break;
                    }
                }
            }

            return(variableArray);
        }
Exemplo n.º 2
0
        //Метод запуска сортировки массива, подсчета времи и записи в файл результатов
        public static void SortArray(uint[] array, ArraySortType AST, ArrayType AT, int arrayLength)
        {
            int testCount = 10;                                 //Количество тестов

            uint[]    HelpTestMass     = new uint[arrayLength]; // Для хранения неотсортированной копии массива
            int[]     timeSortMass     = new int[testCount];    //Для хранения результатов тестов
            int       timeSortMassSumm = 0;
            Stopwatch stopWatch;

            try
            {
                for (int i = 0; i < testCount; i++)//10 испытаний одного массива
                {
                    Array.Copy(array, HelpTestMass, arrayLength);
                    stopWatch = new Stopwatch();
                    stopWatch.Start();
                    switch (AST)
                    {
                    case ArraySortType.SelectionSort:
                        HelpTestMass = Selection(HelpTestMass);
                        break;

                    case ArraySortType.InsertionSort:
                        HelpTestMass = InsertionSort(HelpTestMass);
                        break;

                    case ArraySortType.ShellSort:
                        HelpTestMass = ShellSort(HelpTestMass, arrayLength);
                        break;

                    case ArraySortType.QuickSort:
                        HelpTestMass = Quicksort(HelpTestMass, 0, arrayLength - 1);
                        break;

                    case ArraySortType.MergeSort:
                        HelpTestMass = Merge_Sort(HelpTestMass);
                        break;

                    case ArraySortType.RadixSort:
                        HelpTestMass = RadixSort(HelpTestMass, arrayLength);
                        break;

                    default:
                        Console.WriteLine("Для сортировки указанного типа \"" + AST.ToString() + "\" не задана реализация в программе");
                        break;
                    }
                    stopWatch.Stop();
                    timeSortMass[i]   = (int)stopWatch.ElapsedMilliseconds;
                    timeSortMassSumm += (int)stopWatch.ElapsedMilliseconds;
                }
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (IndexOutOfRangeException ex)
            {
                Console.WriteLine(ex.Message);
            }
            Array.Sort(timeSortMass);
            Console.WriteLine("RunTime " + arrayLength + " " + AST + " " + timeSortMassSumm / testCount + " мс");
            //Механизм записи в файл с именем массива (AST) и рассматриваемым случаем (AT)
            FileStream fout;

            // Открываем файл
            try
            {
                fout = new FileStream(AST + "_" + AT + "_" + arrayLength + ".txt", FileMode.Create);
            }
            catch (IOException exc)
            {
                Console.WriteLine(exc.Message + "Ошибка при открытии выходного файла.");
                return;
            }
            catch (UnauthorizedAccessException exc)
            {
                Console.WriteLine(exc.Message + "Ошибка доступа. Нет прав на создание или запись");
                return;
            }
            try
            {
                byte[] info = new UTF8Encoding(true).GetBytes("Массив из " + arrayLength + " элементов типа " + AT.ToString() + ". Сортировка \"" + AST.ToString() +
                                                              "\" произведена за время: худшее - " + timeSortMass[testCount - 1] + ", среднее - " + timeSortMassSumm / testCount + ", лучшее - " + timeSortMass[0] + " мс \r\n");
                fout.Write(info, 0, info.Length);
                for (int i = 0; i < HelpTestMass.Length; i++)
                {
                    info = new UTF8Encoding(true).GetBytes(HelpTestMass[i] + "\r\n");
                    fout.Write(info, 0, info.Length);
                }
            }
            catch (IOException exc)
            {
                Console.WriteLine(exc.Message + "Ошибка при записи в файл.");
            }
            finally
            {
                fout.Close();
            }
        }