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); }
//Метод запуска сортировки массива, подсчета времи и записи в файл результатов 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(); } }