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

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

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

Здравствуйте. Стоит задача - сгенерировать через RND массив, а затем методом половинного деления найти элемент, который вводится с клавиатуры. Если элемент отсутствует - вывести соответствующее сообщение. Суть вопроса: Когда элемента в массиве нет - сообщение о его отсутствии выводится, а когда вводишь с клавиатуры заведомо существующее в массиве число - курсор просто переходит на следующую строчку. не знаю в чём проблема, ни ошибок, ни исключений....
Листинг программы
  1. static void Main(string[] args)
  2. {
  3. int rows = 10;
  4. int left = 0;
  5. int right = rows - 1;
  6. int middle = 0;
  7. int[] arr = new int[rows];
  8. // Заполняем массив
  9. Random rnd = new Random();
  10. Console.WriteLine("Array that was created by RND");
  11. for (int i = 0; i < rows; ++i)
  12. {
  13. arr[i] = rnd.Next(10, 99);
  14. Console.Write(arr[i] + " ");
  15. }
  16. Console.WriteLine("");
  17. Console.WriteLine("Sorted array");
  18. for (int i = 0; i<rows;++i)
  19. {
  20. Array.Sort(arr);
  21. Console.Write(arr[i] + " ");
  22. }
  23. Console.WriteLine("");
  24. // считываем число
  25. Console.WriteLine("Enter a number you want to search");
  26. int scanInt = Int32.Parse(Console.ReadLine());
  27. //поиск элемента
  28. for (int i = 0; i < rows; ++i)
  29. {
  30. while(arr[left]<=arr[right])
  31. {
  32. arr[middle] = (arr[left] + arr[right]) / 2;
  33. if (arr[middle] == scanInt)
  34. {
  35. arr[i] = arr[middle];
  36. Console.Write("["+i+"]");
  37. break;
  38. }
  39. else if (arr[middle] < scanInt)
  40. {
  41. arr[left] = arr[middle] + 1;
  42. }
  43. else arr[right] = arr[middle] + 1;
  44. }
  45. if (arr[right] !=scanInt)
  46. { Console.WriteLine("There is no mathes"); break; }
  47. }
  48.  
  49. Console.ReadKey();
  50. }
Попутно вопрос. Эта программа должна быть максимально оптимальной. Я прочёл , что функция Array.Sort() работает по разному при разном кол-ве сортируемых элементов, и во всех случаях оптимально. Вопрос к опытным, так ли это, или лучше написать свою сортировку?

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

textual
Листинг программы
  1. static void Main(string[] args)
  2.         {
  3.             int rows = 10;
  4.             int left = 0;
  5.             int right = rows - 1;
  6.             int middle = 0;
  7.             int output;
  8.             int k = -1;
  9.  
  10.             int[] arr = new int[rows];
  11.  
  12.             // Заполняем массив
  13.             Random rnd = new Random();
  14.             Console.WriteLine("Array that was created by RND");
  15.             for (int i = 0; i < rows; ++i)
  16.             {
  17.                 arr[i] = rnd.Next(10, 99);
  18.                Console.Write(arr[i] + " ");
  19.             }
  20.             Console.WriteLine("");
  21.             Console.WriteLine("Sorted array");
  22.             Array.Sort(arr);
  23.             for (int i = 0; i < rows; ++i)
  24.             {
  25.                
  26.                Console.Write(arr[i] + " ");
  27.             }
  28.             Console.WriteLine("");
  29.  
  30.             // считываем число
  31.             Console.WriteLine("Enter a number you want to search");
  32.             int scanInt = Int32.Parse(Console.ReadLine());
  33.  
  34.             //поиск элемента
  35.  
  36.             while (left <= right)
  37.             {
  38.                 middle = (left + right) / 2;
  39.                 if (arr[middle] == scanInt)
  40.                 {
  41.                     output = middle;
  42.                     Console.Write("[" + output + "]");
  43.                     k = arr[output];
  44.                     break;
  45.                 }
  46.                 else if (arr[middle] < scanInt)
  47.                     left = middle + 1;
  48.                 else
  49.                 {
  50.                     right = middle - 1;
  51.                 }
  52.             }
  53.             if (k != scanInt)
  54.             { Console.WriteLine("There is no mathes"); }
  55.  
  56.             Console.ReadKey();
  57.         }

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


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

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

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы