Метод половинного деления - C# (185327)
Формулировка задачи:
Здравствуйте. Стоит задача - сгенерировать через RND массив, а затем методом половинного деления найти элемент, который вводится с клавиатуры. Если элемент отсутствует - вывести соответствующее сообщение. Суть вопроса: Когда элемента в массиве нет - сообщение о его отсутствии выводится, а когда вводишь с клавиатуры заведомо существующее в массиве число - курсор просто переходит на следующую строчку. не знаю в чём проблема, ни ошибок, ни исключений....
Попутно вопрос. Эта программа должна быть максимально оптимальной. Я прочёл , что функция Array.Sort() работает по разному при разном кол-ве сортируемых элементов, и во всех случаях оптимально. Вопрос к опытным, так ли это, или лучше написать свою сортировку?
static void Main(string[] args) { int rows = 10; int left = 0; int right = rows - 1; int middle = 0; int[] arr = new int[rows]; // Заполняем массив Random rnd = new Random(); Console.WriteLine("Array that was created by RND"); for (int i = 0; i < rows; ++i) { arr[i] = rnd.Next(10, 99); Console.Write(arr[i] + " "); } Console.WriteLine(""); Console.WriteLine("Sorted array"); for (int i = 0; i<rows;++i) { Array.Sort(arr); Console.Write(arr[i] + " "); } Console.WriteLine(""); // считываем число Console.WriteLine("Enter a number you want to search"); int scanInt = Int32.Parse(Console.ReadLine()); //поиск элемента for (int i = 0; i < rows; ++i) { while(arr[left]<=arr[right]) { arr[middle] = (arr[left] + arr[right]) / 2; if (arr[middle] == scanInt) { arr[i] = arr[middle]; Console.Write("["+i+"]"); break; } else if (arr[middle] < scanInt) { arr[left] = arr[middle] + 1; } else arr[right] = arr[middle] + 1; } if (arr[right] !=scanInt) { Console.WriteLine("There is no mathes"); break; } } Console.ReadKey(); }
Решение задачи: «Метод половинного деления»
textual
Листинг программы
static void Main(string[] args) { int rows = 10; int left = 0; int right = rows - 1; int middle = 0; int output; int k = -1; int[] arr = new int[rows]; // Заполняем массив Random rnd = new Random(); Console.WriteLine("Array that was created by RND"); for (int i = 0; i < rows; ++i) { arr[i] = rnd.Next(10, 99); Console.Write(arr[i] + " "); } Console.WriteLine(""); Console.WriteLine("Sorted array"); Array.Sort(arr); for (int i = 0; i < rows; ++i) { Console.Write(arr[i] + " "); } Console.WriteLine(""); // считываем число Console.WriteLine("Enter a number you want to search"); int scanInt = Int32.Parse(Console.ReadLine()); //поиск элемента while (left <= right) { middle = (left + right) / 2; if (arr[middle] == scanInt) { output = middle; Console.Write("[" + output + "]"); k = arr[output]; break; } else if (arr[middle] < scanInt) left = middle + 1; else { right = middle - 1; } } if (k != scanInt) { Console.WriteLine("There is no mathes"); } Console.ReadKey(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д