public static void SortArray(ArrayType AT, int arrayLength) { uint[] array = new uint[arrayLength]; //Cоздаём тестовый массив заданной длинны и типа try { array = CreateArray(arrayLength, ArrayType.FullRandom); } catch (OverflowException ex) { Console.WriteLine("Переполнение: " + ex.Message); } catch (OutOfMemoryException ex) { Console.WriteLine("Задан массив слишком большой длинны: " + ex.Message); } string[] sortNames = { "Selection", "Insertion", "Merge", "Quick", "Radix", "Shell" };//Названия массивов в порядке сортировки SortClass sc = new SortClass(); for (int sortNum = 0; sortNum < 6; sortNum++) { int testCount = 10; //Количество тестов uint[] HelpTestMass = new uint[arrayLength]; // Для хранения неотсортированной копии массива int[] timeSortMass = new int[testCount]; //Для хранения результатов тестов int timeSortMassMid = 0; //для хранения среднего результата испытаний Stopwatch stopWatch; try { for (int j = 0; j < testCount; j++)//10 испытаний одного массива { Array.Copy(array, HelpTestMass, arrayLength); stopWatch = new Stopwatch(); stopWatch.Start(); if (sortNum == 0) { HelpTestMass = sc.Selection(HelpTestMass); } else if (sortNum == 1) { HelpTestMass = sc.Insertion(HelpTestMass); } else if (sortNum == 2) { HelpTestMass = sc.Merge(HelpTestMass); } else if (sortNum == 3) { HelpTestMass = sc.Quick(HelpTestMass, 0, arrayLength - 1); } else if (sortNum == 4) { HelpTestMass = sc.Radix(HelpTestMass, arrayLength); } else if (sortNum == 5) { HelpTestMass = sc.Shell(HelpTestMass, arrayLength); } else { Console.WriteLine("Задан неверный код типа сортировки"); } stopWatch.Stop(); timeSortMass[j] = (int)stopWatch.ElapsedMilliseconds; timeSortMassMid += (int)stopWatch.ElapsedMilliseconds; } } catch (ArgumentException ex) { Console.WriteLine(ex.Message); } catch (IndexOutOfRangeException ex) { Console.WriteLine(ex.Message); } timeSortMassMid = timeSortMassMid / testCount; Array.Sort(timeSortMass); Console.WriteLine("RunTime " + arrayLength + " " + sortNames[sortNum] + " " + timeSortMassMid + " мс"); //Механизм записи в файл с именем массива и рассматриваемым случаем FileStream fout; // Открываем файл try { fout = new FileStream(sortNames[sortNum] + "_" + 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() + ". Сортировка \"" + sortNames[sortNum].ToString() + "\" произведена за время: худшее - " + timeSortMass[testCount - 1] + ", среднее - " + timeSortMassMid + ", лучшее - " + 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(); } testCount = 0;//обнуляем счетчик тестов } }
public static void Main(string[] args) { var sortClass = new SortClass(); sortClass.GetSort(); }