Напечатать список студентов строго в порядке уменьшения возраста. "Приостановить" быструю сортировку - C#

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

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

Здравствуйте. Подскажите, как мне отсортировать массив быстрой сортировкой до кусочков, меньших 3? То есть приостановить ее на этом моменте. Код сортировки ниже, вся программа с условием задачи еще ниже под спойлером. Я так понимаю, мне нужно вставить условие Math.Abs(a-b) > 2. Пробовал в разных местах, но так как не представляю, как в идеале должен выглядеть массив, отсортированный быстрой сортировкой до кусочков, меньших 3, полагаться на свои знания не могу. Заранее благодарю за ответ
Листинг программы
  1. public static void QuickSort(Students[] arr, int start, int end)
  2. {
  3. int point = arr[(start + end) / 2].data;
  4. int a = start, b = end;
  5. while (a <= b)
  6. {
  7. while (arr[a].data < point) a++;
  8. while (arr[b].data > point) b--;
  9. if (a <= b)
  10. {
  11. Students temp = arr[a];
  12. arr[a] = arr[b];
  13. arr[b] = temp;
  14. a++; b--;
  15. }
  16. }
  17. if ((a < end)) { QuickSort(arr, a, end); }
  18. if ((start < b)) { QuickSort(arr, start, b); }
  19. }
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. struct Students
  8. {
  9. public string lastname; // Фамилия
  10. public string initials; // Инициалы
  11. public int day; // День рождения
  12. public int month; // Месяц рождения
  13. public int year; // Год рождения
  14. public int data; // Дата рождения в формате ггггммдд
  15. }
  16. namespace StudentsSort
  17. {
  18. class Program
  19. {
  20. static void ArrayFromTxtFile(Students[] arr)
  21. {
  22. string InPath = "TxtFiles/in.txt";
  23. StreamReader sr = new StreamReader(InPath, Encoding.GetEncoding(1251));
  24. string line;
  25. int i = 0;
  26. while ((line = sr.ReadLine()) != null)
  27. {
  28. string[] s = line.Split(' ');
  29. arr[i].lastname = s[0];
  30. arr[i].initials = s[1];
  31. s = line.Split('.');
  32. arr[i].day = int.Parse(s[2]);
  33. arr[i].month = int.Parse(s[3]);
  34. arr[i].year = int.Parse(s[4]);
  35. arr[i].data = arr[i].year * 10000 + arr[i].month * 100 + arr[i].day; // Формируем числовую запись даты рождения в формате ггггммдд
  36. i++;
  37. }
  38. sr.Close();
  39. }
  40. public static void QuickSort(Students[] arr, int start, int end)
  41. {
  42. int point = arr[(start + end) / 2].data;
  43. int a = start, b = end;
  44. while (a <= b)
  45. {
  46. while (arr[a].data < point) a++;
  47. while (arr[b].data > point) b--;
  48. if (a <= b)
  49. {
  50. Students temp = arr[a];
  51. arr[a] = arr[b];
  52. arr[b] = temp;
  53. a++; b--;
  54. }
  55. }
  56. if ((a < end)) { QuickSort(arr, a, end); }
  57. if ((start < b)) { QuickSort(arr, start, b); }
  58. }
  59. public static void ShellSort(Students[] arr)
  60. {
  61. int point = arr.Length;
  62. while (point > 0)
  63. {
  64. for (int i = 0; i < arr.Length - point; i++)
  65. {
  66. int j = i;
  67. while ((j >= 0) && (arr[j + point].data < arr[j].data))
  68. {
  69. Students temp = arr[j];
  70. arr[j] = arr[j + point];
  71. arr[j + point] = temp;
  72. j--;
  73. }
  74. }
  75. point /= 2;
  76. }
  77. }
  78. static void PrintArray(Students[] arr, int LineCount) // Вывод на экран
  79. {
  80. for (int i = 0; i < LineCount; i++)
  81. {
  82. Console.Write("{0} {1}\t", arr[i].lastname, arr[i].initials);
  83. if (arr[i].day < 10) { Console.Write("0{0}.", arr[i].day); } else { Console.Write("{0}.", arr[i].day); }
  84. if (arr[i].month < 10) { Console.Write("0{0}.", arr[i].month); } else { Console.Write("{0}.", arr[i].month); }
  85. Console.WriteLine("{0}", arr[i].year);
  86. }
  87. }
  88. static void SaveArrayInTxtFile(Students[] arr, int LineCount) // Печать в файл
  89. {
  90. string OutPath = "TxtFiles/out.txt";
  91. StreamWriter sw = new StreamWriter(OutPath);
  92. for (int i = 0; i < LineCount; i++)
  93. {
  94. sw.Write("{0} {1}\t", arr[i].lastname, arr[i].initials);
  95. if (arr[i].day < 10) { sw.Write("0{0}.", arr[i].day); } else { sw.Write("{0}.", arr[i].day); }
  96. if (arr[i].month < 10) { sw.Write("0{0}.", arr[i].month); } else { sw.Write("{0}.", arr[i].month); }
  97. sw.WriteLine("{0}", arr[i].year);
  98. }
  99. sw.Close();
  100. }
  101. static void Main(string[] args)
  102. {
  103. int LineCount = File.ReadLines("in.txt").Count(); // Записываем в переменную LineCount количество строк в файле in.txt в папке с программой
  104. Students[] Array = new Students[LineCount]; // Создаем структуру
  105. ArrayFromTxtFile(Array); // Заполняем структуру данными из файла in.txt в папке с программой
  106. Console.WriteLine("\n\tБаза данных студентов до упорядочивания" + "\n");
  107. PrintArray(Array, LineCount); // Выводим на экран исходные данные
  108. QuickSort(Array, 0, LineCount - 1); // Сортируем методом "Быстрой сортировки"
  109. ShellSort(Array); // Сортируем методом "Шелла"
  110. System.Array.Reverse(Array); // Инвертируем массив, чтобы он был в порядке убывания
  111. Console.WriteLine("\n\tБаза данных студентов после упорядочивания" + "\n");
  112. PrintArray(Array, LineCount); // Выводим на экран отсортированный массив
  113. SaveArrayInTxtFile(Array, LineCount); // Сохраняем полученный массив в файл out.txt в папке с программой
  114. Console.ReadKey();
  115. }
  116. }
  117. }

Решение задачи: «Напечатать список студентов строго в порядке уменьшения возраста. "Приостановить" быструю сортировку»

textual
Листинг программы
  1. public static void QuickSortPartial(Students[] arr, int start, int end, int range = 3)
  2.         {
  3.             if (end - start <= range)
  4.                return;
  5.             int point = arr[(start + end) / 2].data;
  6.             int a = start, b = end;
  7.             while (a <= b)
  8.             {
  9.                 while (arr[a].data < point) a++;
  10.                 while (arr[b].data > point) b--;
  11.                 if (a <= b)
  12.                 {
  13.                     Students temp = arr[a];
  14.                     arr[a] = arr[b];
  15.                     arr[b] = temp;
  16.                     a++; b--;
  17.                 }
  18.             }
  19.             if ((a < end)) { QuickSort(arr, a, end); }
  20.             if ((start < b)) { QuickSort(arr, start, b); }
  21.         }

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


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

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

15   голосов , оценка 4.2 из 5

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

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

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