Метод половинного деления - 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();
}