Метод половинного деления - C# (185327)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Стоит задача - сгенерировать через RND массив, а затем методом половинного деления найти элемент, который вводится с клавиатуры. Если элемент отсутствует - вывести соответствующее сообщение. Суть вопроса: Когда элемента в массиве нет - сообщение о его отсутствии выводится, а когда вводишь с клавиатуры заведомо существующее в массиве число - курсор просто переходит на следующую строчку. не знаю в чём проблема, ни ошибок, ни исключений....
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();
        }
Попутно вопрос. Эта программа должна быть максимально оптимальной. Я прочёл , что функция Array.Sort() работает по разному при разном кол-ве сортируемых элементов, и во всех случаях оптимально. Вопрос к опытным, так ли это, или лучше написать свою сортировку?

Решение задачи: «Метод половинного деления»

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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы