static void Main(string[] args) { Random rnd = new Random(); var nums = new int[10000]; for (int count = 0; count < 10; count++) { for (int i = 0; i < nums.Length; i++) { nums[i] = rnd.Next(1, 10000); } var result = MergeSort.Sort(nums, (a, b) => a - b); // LINQのOrderByメソッドの結果と比較することで、MergeSortが正しく整列されているかを確認している bool isEqual = Enumerable.SequenceEqual(result, nums.OrderBy(n => n)); Console.WriteLine(isEqual); } Console.WriteLine("end"); }
private void SortArrayClick(object sender, RoutedEventArgs e) { FlipView.Items.Clear(); int i = 0; //Checks if all members are numbers bool allAreNumber = true; for (int j = 0; j < sample.Count; j++) { if (!int.TryParse(sample[i], out int num)) { allAreNumber = false; } } //If all are numbers, convert int[] sampleintarray = new int[sample.Count]; if (allAreNumber) { for (int j = 0; j < sample.Count; j++) { sampleintarray[j] = Convert.ToInt32(sample[j]); } var tempresult = MergeSort <int> .Do(sampleintarray); Result = new string[sampleintarray.Length]; var tempHistory = MergeSort <int> .History; for (int j = 0; j < tempresult.Length; j++) { Result[j] = tempresult[j].ToString(); } History.Clear(); foreach (int[] ints in tempHistory) { string[] tempstep = new string[ints.Length]; for (int j = 0; j < ints.Length; j++) { tempstep[j] = ints[j].ToString(); } History.Add(tempstep); } } else { Result = MergeSort <string> .Do(sample.ToArray()); History = MergeSort <string> .History; } sample = Result.ToList(); Array.ItemsSource = sample; var x = CreateFlipViews(); foreach (FlipViewItem flipViewItem in x) { FlipView.Items.Add(flipViewItem); } FlipView.SelectedIndex = 0; yourMahAppFlyout.IsOpen = false; }
static public void CheckCorrectArgs(string[] userInput) { //блок экземпляров для чисел ReadInputFiles inputIntCollection = new ReadInputFiles(); MergeSort <int> EndResultInt = new MergeSort <int>(); List <int> resultSort = new List <int>(); //блок экземпляров для строк ReadInputFilesString inputStringCollectionString = new ReadInputFilesString(); MergeSort <string> EndResultString = new MergeSort <string>(); List <string> resultSortString = new List <string>(); int i = 0; bool flag = true; while (flag == true && i < userInput.Length) { if (userInput[i] == "-help") { ShowManual(); break; } if (userInput.Length < 5) { Console.WriteLine("Указано недопустимое количество параметров.При запуске обязательно указать:" + "\n 1) Тип данных для сортировки \n 2) Имя выходного файла \n 3) Имя выходного файла. " + "4)Имя входного файла 1. \n5) Имя входного файла 2." + "\nПрочитайте инструкцию и перезапустите программу, указав верное значение аргументов\n"); ShowManual(); flag = false; } else { switch (userInput[0]) { case "-d": Condition1Args(userInput[0], userInput); break; case "-a": Condition1Args(userInput[0], userInput); break; default: Console.WriteLine(" Введено неверное значение 1 - го аргумента." + "\n Аргумент 1 должен содержать:" + "\n 1) Режим сортировки. Обязательный к указанию. Принимаемые парметры : '-d' = сортировка по возрастанию '-a' = сортировка по убыванию" + "\nПрочитайте инструкцию и перезапустите программу, указав верное значение аргументов\n"); ShowManual(); flag = false; break; } } //Вызов инструкции для корректного запуска программы void ShowManual() { Console.WriteLine("Добрый день! Сразу к делу! \nДля корректного запуска программы неободимо ввести верную последовательность аругментов " + "\n 1) Тип сортировки (Обязательный аргумент). \nУказываемые парметры: \n '-d' - сотрировка по возрастанию. \n '-a' - сортировка по убыванию " + "\n2) Тип сортируемых данных (Обязательный аргумент). \nУказываемые параметры: \n '-s' - тип string. \n '-i' - тип int." + "\n3) Имя выходного файла. Если имя не будет указано, то файл будет создан автоматически и будет ему имя 'output.txt' " + "\n4) Имя вхожного файла 1. Имя файла должно быть 'inpit1.txt'" + "\n5) Имя вхожного файла 1. Имя файла должно быть 'inpit2.txt'" ); } } //метод который работает с аргументами, если не будет четкого соблюдения, то напишет ошибку. Также если все хорошо, то будет отражен конечный результат void Condition1Args(string arg0, string[] args) { try { if (args[1] == "-s") { if (args[3] == "input1.txt" && args[4] == "input2.txt") { if (arg0 == "-d") { resultSortString = EndResultString.Sort(inputStringCollectionString.GetString(userInput[3], userInput[4])); File.WriteAllLines(userInput[2], resultSortString); Console.WriteLine($"Данные успешно записаны в файл: {userInput[2]}"); flag = false; } else { resultSortString = EndResultString.Sort(inputStringCollectionString.GetString(userInput[3], userInput[4])); resultSortString.Reverse(); // переворачиваем содержимое из-за того что пользователь ввел аргумент -а File.WriteAllLines(userInput[2], resultSortString); Console.WriteLine($"Данные успешно записаны в файл: {userInput[2]}"); flag = false; } } else { Console.WriteLine("Неверный аргумент 4 или 5. \nПерезапустите программу только с одним аргументом '-help' чтобы прочитать инструкцию по запуску.Вероятно указанные входные файлы не найдены"); flag = false; } } else if (args[1] == "-i") { if (args[3] == "input1.txt" && args[4] == "input2.txt") { if (arg0 == "-d") { resultSort = EndResultInt.Sort(inputIntCollection.GetInt(userInput[3], userInput[4])); File.WriteAllLines(userInput[2], ConvertToString(resultSort)); Console.WriteLine($"Данные успешно записаны в файл: {userInput[2]}"); flag = false; } else { resultSort = EndResultInt.Sort(inputIntCollection.GetInt(userInput[3], userInput[4])); resultSort.Reverse(); // переворачиваем содержимое из-за того что пользователь ввел аргумент -а File.WriteAllLines(userInput[2], ConvertToString(resultSort)); Console.WriteLine($"Данные успешно записаны в файл: {userInput[2]}"); flag = false; } } else { Console.WriteLine("Неверный аргумент 4 или 5. Перезапустите программу только с одним аргументом '-help' чтобы прочитать инструкцию по запуску.Вероятно указанные входные файлы не найдены"); flag = false; } } else { Console.WriteLine("Неверный аргумент 2. Перезапустите программу только с одним аргументом '-help' чтобы прочитать инструкцию по запуску."); flag = false; } } catch (FormatException ex) { Console.WriteLine($"Вызвано исключение: {ex.Message}. \nВ одном из входных файлов присутствует неверный тип данных. Проверьте входные файлы на однородность типов данных и перезапустите программу!"); flag = false; } } // метод конверитрует все символы в в строки из-за особенностей метода File.AllWriteLines. List <string> ConvertToString(List <int> items) { List <string> result1 = new List <string>(); for (int j = 0; j < items.Count; j++) { result1.Add(items[j].ToString()); } return(result1); } }
static void Main(string[] args) { Random rnd = new Random(); const int MAX_SIZE = 64; Boolean isValid; //=> do loop flag int size = 0; //=> size of array int[] arr; //=> array string range; //=> range input string[] bounds; //=> split range input int upperBound = 0, lowerBound = 0; //=> range bounds string message = "Welcome to Merge Sort in C#"; Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine(message); do //=> input entry for array size { Console.ForegroundColor = ConsoleColor.White; isValid = false; Console.WriteLine("\nPlease enter an array size that is greater than 0 and less than or equal to {0}:", MAX_SIZE); try { //=> guard against non-numeric data size = Convert.ToInt32(Console.ReadLine()); try { //=> guard against invalid array size if (size <= 0) { throw new OverflowException(); } try { if (size > MAX_SIZE) { throw new OverflowException(); } isValid = true; } catch (OverflowException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(".. Invaild input, {0} is larger than {1}.\n", size, MAX_SIZE); } } catch (OverflowException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(".. Invaild input, you cannot have an array of size {0}.\n", size); } } catch (FormatException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(".. Invaild input, input must be of TYPE integer.\n"); } } while (isValid != true); do //=> input entry for element range { Console.ForegroundColor = ConsoleColor.White; isValid = false; Console.WriteLine("\nPlease enter a range (integer values only) lower bound <space> upper bound:"); range = Console.ReadLine(); bounds = range.Split(' ', '\t'); try { //=> check for correct range format (two values) if (bounds.Length != 2) { throw new ArgumentOutOfRangeException(); } try { //=> guard against non-numeric data lowerBound = Convert.ToInt32(bounds[0]); upperBound = Convert.ToInt32(bounds[1]); try { //=> guard against non-ascending range if (upperBound < lowerBound) { throw new Exception(); } else { isValid = true; } } catch (Exception e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(".. Invaild input, lower bound({0}) is larger than upper bound({1}).\n", lowerBound, upperBound); } } catch (FormatException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(".. Invaild input, both inputs must be of TYPE integer.\n"); } } catch (ArgumentOutOfRangeException e) { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine(".. Invalid range, range requires two values.\n"); } } while (isValid != true); arr = new int[size]; //=> instantiate the array for (int i = 0; i < arr.Length; i++) //=> populate the array { arr[i] = rnd.Next(lowerBound, upperBound); } Console.WriteLine("\n\n> Status: Unsorted\n> Timestamp: {0}\n> Type: {1}\n> Size: {2}\n> Range: {3} to {4}\n", DateTime.Now, arr.GetType(), size, lowerBound, upperBound); MergeSort.displayArray(arr, arr.Length); //=> display the unsorted array MergeSort.mergeSort(arr, arr.Length); //=> sort the array using mergeSort Console.WriteLine("\n\n> Status: Sorted\n> Timestamp: {0}\n> Merge Sort (recursive)\n> Type: {1}\n> Size: {2}\n> Range: {3} to {4}\n", DateTime.Now, arr.GetType(), size, lowerBound, upperBound); MergeSort.displayArray(arr, arr.Length); //=> display the sorted array }