Сортировка с проверочными методами - C#

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

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

Не вызываются методы, есть ошибка с бесконечным циклом как исправить?
Листинг программы
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. TestMethod1();
  6. Tests100Numbers();
  7. //CheckIsSorted();
  8. Tests1000Numbers();
  9. TestEmpty();
  10. TestBig();
  11.  
  12. }
  13. public static void QuickSort(int[] array, int l, int r)
  14. {
  15. r = array.Length - 1;
  16. l = 0;
  17. int temp;
  18. int x = array[l + (r - l) / 2];
  19. //запись эквивалентна (l+r)/2,
  20. //но не вызввает переполнения на больших данных
  21. int i = l;
  22. int j = r;
  23. //код в while обычно выносят в процедуру particle
  24. while (i <= j)
  25. {
  26. while (array[i] < x) i++;
  27. while (array[j] > x) j--;
  28. if (i <= j)
  29. {
  30. temp = array[i];
  31. array[i] = array[j];
  32. array[j] = temp;
  33. i++;
  34. j--;
  35. }
  36. }
  37. if (i < r)
  38. QuickSort(array, i, r);
  39. if (l < j)
  40. QuickSort(array, l, j);
  41. }
  42. public static void TestMethod1()
  43. {
  44. var array = new[] { 3, 2, 1 };
  45. int r = array.Length - 1;
  46. int l = 0;
  47. QuickSort(array, l, r);
  48. if (array[1] < array[0]|| array[2] < array[1])
  49. {
  50. Console.WriteLine("Второй элемент не больше первого");
  51. }
  52. else
  53. {
  54. Console.WriteLine("Сортировка выполнена правильно");
  55. }
  56. }
  57. public static void Tests100Numbers()
  58. {
  59. var array = new int[100];
  60. int r = array.Length - 1;
  61. int l = 0;
  62. for (int i = 0; i < 100; i++)
  63. {
  64. array[i] = 42;
  65. }
  66. QuickSort(array, l, r);
  67. sbyte c = 0;
  68. for (int i = 1; i < 100; i++)
  69. {
  70. if (array[i] < array[i - 1])
  71. c++;
  72. }
  73. if (c != 0)
  74. {
  75. Console.WriteLine("Сортировка работает неправильно");
  76. }
  77. else
  78. {
  79. Console.WriteLine("Сортировка работает правильно");
  80. }
  81. }
  82.  
  83. public static void CheckIsSorted(int[] array)
  84. {
  85. sbyte c = 0;
  86. for (int i = 0; i < array.Length - 1; i++)
  87. {
  88. if (array[i] < array[i - 1])
  89. c++;
  90. }
  91. if (c != 0)
  92. {
  93. Console.WriteLine("Сортировка работает неправильно");
  94. }
  95. else
  96. {
  97. Console.WriteLine("Сортировка работает правильно");
  98. }
  99. }
  100. public static void Tests1000Numbers()
  101. {
  102. Random rnd = new Random();
  103. var array = new int[1000];
  104. int r = array.Length - 1;
  105. int l = 0;
  106. for (int i = 0; i < 1000; i++)
  107. {
  108. array[i] = rnd.Next();
  109. }
  110. QuickSort(array, l, r);
  111. for (int i = 0; i < 10; i++)
  112. {
  113. int left = 0, right = 0;
  114. left = rnd.Next(1000);
  115. while (left == right)
  116. right = rnd.Next(1000);
  117. if (right < left)
  118. {
  119. var tmp = left;
  120. left = right;
  121. right = tmp;
  122. }
  123. if (array[left] > array[right])
  124. {
  125. Console.WriteLine("Сортировка работает неправильно");
  126. }
  127. else
  128. {
  129. Console.WriteLine("Сортировка работает правильно");
  130. }
  131. }
  132. }
  133. public static void TestEmpty()
  134. {
  135. var array = new int[0];
  136. int r = array.Length - 1;
  137. int l = 0;
  138. QuickSort(array, l, r);
  139. Console.WriteLine();
  140. }
  141. public static void TestBig()
  142. {
  143. var array = new int[50000];
  144. int r = array.Length - 1;
  145. int l = 0;
  146. QuickSort(array, l, r);
  147. sbyte c = 0;
  148. for (int i = 1; i < 50000; i++)
  149. {
  150. if (array[i] < array[i - 1])
  151. c++;
  152. }
  153. if (c != 0)
  154. {
  155. Console.WriteLine("Сортировка работает неправильно");
  156. }
  157. else
  158. {
  159. Console.WriteLine("Сортировка работает правильно");
  160. }
  161. }
  162. }

Решение задачи: «Сортировка с проверочными методами»

textual
Листинг программы
  1. using System;
  2.  
  3. class Program
  4. {
  5.     static void Main(string[] args)
  6.     {
  7.         TestMethod1();
  8.         Tests100Numbers();
  9.         //CheckIsSorted();
  10.         Tests1000Numbers();
  11.         TestEmpty();
  12.         TestBig();
  13.     }
  14.  
  15.     public static void QuickSort(int[] array)
  16.     {
  17.         if (array.Length < 2) return;
  18.         QuickSortInner(array, 0, array.Length - 1);
  19.     }
  20.  
  21.     private static void QuickSortInner(int[] array, int l, int r)
  22.     {
  23.         int x = array[l + (r - l) / 2];
  24.         //запись эквивалентна (l+r)/2,
  25.         //но не вызввает переполнения на больших данных
  26.  
  27.         int i = l;
  28.         int j = r;
  29.         //код в while обычно выносят в процедуру particle
  30.         while (i <= j)
  31.         {
  32.             while (array[i] < x) i++;
  33.             while (array[j] > x) j--;
  34.             if (i <= j)
  35.             {
  36.                 int temp = array[i];
  37.                 array[i] = array[j];
  38.                 array[j] = temp;
  39.                 i++;
  40.                 j--;
  41.             }
  42.         }
  43.         if (i < r)
  44.             QuickSortInner(array, i, r);
  45.  
  46.         if (l < j)
  47.             QuickSortInner(array, l, j);
  48.     }
  49.  
  50.     public static void TestMethod1()
  51.     {
  52.         var array = new[] { 3, 2, 1 };
  53.         QuickSort(array);
  54.         if (array[1] < array[0] || array[2] < array[1])
  55.         {
  56.             Console.WriteLine("Второй элемент не больше первого");
  57.         }
  58.         else
  59.         {
  60.             Console.WriteLine("Сортировка выполнена правильно");
  61.         }
  62.  
  63.     }
  64.  
  65.     public static void Tests100Numbers()
  66.     {
  67.         var array = new int[100];
  68.         for (int i = 0; i < 100; i++)
  69.         {
  70.             array[i] = 42;
  71.         }
  72.         QuickSort(array);
  73.         sbyte c = 0;
  74.         for (int i = 1; i < 100; i++)
  75.         {
  76.             if (array[i] < array[i - 1])
  77.                 c++;
  78.  
  79.         }
  80.         if (c != 0)
  81.         {
  82.             Console.WriteLine("Сортировка работает неправильно");
  83.         }
  84.         else
  85.         {
  86.             Console.WriteLine("Сортировка работает правильно");
  87.         }
  88.     }
  89.  
  90.  
  91.     public static void CheckIsSorted(int[] array)
  92.     {
  93.         sbyte c = 0;
  94.         for (int i = 0; i < array.Length - 1; i++)
  95.         {
  96.             if (array[i] < array[i - 1])
  97.                 c++;
  98.  
  99.         }
  100.         if (c != 0)
  101.         {
  102.             Console.WriteLine("Сортировка работает неправильно");
  103.         }
  104.         else
  105.         {
  106.             Console.WriteLine("Сортировка работает правильно");
  107.         }
  108.     }
  109.  
  110.     public static void Tests1000Numbers()
  111.     {
  112.         Random rnd = new Random();
  113.         var array = new int[1000];
  114.         for (int i = 0; i < 1000; i++)
  115.         {
  116.             array[i] = rnd.Next();
  117.         }
  118.         QuickSort(array);
  119.         for (int i = 0; i < 10; i++)
  120.         {
  121.             int left = 0, right = 0;
  122.             left = rnd.Next(1000);
  123.             while (left == right)
  124.                 right = rnd.Next(1000);
  125.             if (right < left)
  126.             {
  127.                 var tmp = left;
  128.                 left = right;
  129.                 right = tmp;
  130.             }
  131.             if (array[left] > array[right])
  132.             {
  133.                 Console.WriteLine("Сортировка работает неправильно");
  134.             }
  135.             else
  136.             {
  137.                 Console.WriteLine("Сортировка работает правильно");
  138.             }
  139.         }
  140.     }
  141.  
  142.     public static void TestEmpty()
  143.     {
  144.         var array = new int[0];
  145.         QuickSort(array);
  146.         Console.WriteLine();
  147.     }
  148.  
  149.     public static void TestBig()
  150.     {
  151.         var array = new int[50000];
  152.         QuickSort(array);
  153.         sbyte c = 0;
  154.         for (int i = 1; i < 50000; i++)
  155.         {
  156.             if (array[i] < array[i - 1])
  157.                 c++;
  158.         }
  159.         if (c != 0)
  160.         {
  161.             Console.WriteLine("Сортировка работает неправильно");
  162.         }
  163.         else
  164.         {
  165.             Console.WriteLine("Сортировка работает правильно");
  166.         }
  167.     }
  168. }

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


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

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

9   голосов , оценка 4.222 из 5

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

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

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