Метод половинного деления - 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д