artemgf

Untitled

Sep 27th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.59 KB | None | 0 0
  1. //! @file
  2. //! \brief Программа перевода числовой записи времени в текстово-числовую форму записи
  3. //! @mainpage
  4. //-----------------------------------------------------------------------------------------------------------------
  5. //! \author Ветошкин Артем
  6. //! \version alpha 1
  7. //! \date 03.09.2019
  8. //=================================================================================================================
  9.  
  10. #define _USE_MATH_DEFINES
  11.  
  12. #include <iostream>
  13. #include <assert.h>
  14. #include <math.h>
  15. #include <time.h>
  16.  
  17. int cmpDecr(int p1, int p2)
  18. {
  19. if (p1 > p2)
  20. return -1;
  21. if (p1 < p2)
  22. return 1;
  23. return 0;
  24. }
  25.  
  26. int cmpIncr(int p1, int p2)
  27. {
  28. if (p1 > p2)
  29. return 1;
  30. if (p1 < p2)
  31. return -1;
  32. return 0;
  33. }
  34.  
  35. //-----------------------------------------------------------------------------------------------------------------
  36. //! \brief Сортировка выбором максимального
  37. //!
  38. //! \param left начало сортируемого участка
  39. //! \param right конец сортируемого участка включительно
  40. //! \param[out] swaping число обменов
  41. //! \param[out] comparisons число сравнений
  42. //! \param[out] Array сортеруемый массив
  43. //!
  44. //------------------------------------------------------------------------------------------------------------------
  45.  
  46. void selectionSorting(int left, int right, int* swaping, int* comparisons, int* Array, int (*cmp)(int a, int b) = cmpIncr)
  47. {
  48. assert(swaping != nullptr);
  49. assert(comparisons != nullptr);
  50. assert(swaping != comparisons);
  51. assert(Array != nullptr);
  52. assert(cmp != nullptr);
  53.  
  54. for (int i = right-1; i >= left; --i)
  55. {
  56. int max = Array[i];
  57. int index = i;
  58.  
  59. for (int j = i - 1; j >= left; --j)
  60. {
  61. if (cmp(Array[j], max) == 1)
  62. {
  63. max = Array[j];
  64. index = j;
  65.  
  66. (*swaping)++;
  67. }
  68.  
  69. (*comparisons)++;
  70. }
  71.  
  72. if (Array[i] != Array[index])
  73. {
  74. std::swap(Array[i], Array[index]);
  75. (*swaping)++;
  76. }
  77. (*comparisons)++;
  78. }
  79. }
  80.  
  81. //-----------------------------------------------------------------------------------------------------------------
  82. //! \brief Сортировка пузырьком
  83. //!
  84. //! \param left начало сортируемого участка
  85. //! \param right конец сортируемого участка включительно
  86. //! \param[out] swaping число обменов
  87. //! \param[out] comparisons число сравнений
  88. //! \param[out] Array сортеруемый массив
  89. //!
  90. //-----------------------------------------------------------------------------------------------------------------
  91.  
  92. void bubbleSorting(int left, int right, int* swaping, int* comparisons, int* Array, int (*cmp)(int a, int b) = cmpIncr)
  93. {
  94. assert(swaping != nullptr);
  95. assert(comparisons != nullptr);
  96. assert(swaping != comparisons);
  97. assert(Array != nullptr);
  98. assert(cmp != nullptr);
  99.  
  100. bool end = false;
  101.  
  102. while (!end)
  103. {
  104. end = true;
  105.  
  106. for (int i = left + 1; i < right; i++)
  107. {
  108. if (cmp(Array[i - 1], Array[i]) == 1)
  109. {
  110. std::swap(Array[i], Array[i - 1]);
  111. (*swaping)++;
  112.  
  113. end = false;
  114. }
  115.  
  116. (*comparisons)++;
  117. }
  118.  
  119. right--;
  120. }
  121. }
  122.  
  123. void fillRandInt(int* Array, size_t size, int left, int right)
  124. {
  125. for (size_t i = 0; i < size; i++)
  126. {
  127. Array[i] = left + (right - left + 1) * rand() / RAND_MAX;
  128. }
  129. }
  130.  
  131. void copyNElments(int* ArrayFrom, int* ArrayTo, size_t size)
  132. {
  133. for (size_t i = 0; i < size; i++)
  134. {
  135. ArrayTo[i] = ArrayFrom[i];
  136. }
  137. }
  138.  
  139. void printArray(int* Array, size_t size)
  140. {
  141. printf("Array: ");
  142. for (size_t i = 0; i < size; i++)
  143. printf("%d ", Array[i]);
  144. }
  145.  
  146. void FirstTask()
  147. {
  148. int Array[6];
  149. int Array2[6];
  150.  
  151. int swaping = 0, comparisons = 0;
  152.  
  153. fillRandInt(Array, 6, 1, 100);
  154. copyNElments(Array, Array2, 6);
  155.  
  156. printArray(Array, 6);
  157. printf("\nСортировка пузырьком: \n");
  158.  
  159. bubbleSorting(0, 6, &swaping, &comparisons, Array);
  160.  
  161. printArray(Array, 6);
  162. printf(" обменов: %4d сравнений: %4d \n", swaping, comparisons);
  163.  
  164. swaping = 0, comparisons = 0;
  165. bubbleSorting(0, 6, &swaping, &comparisons, Array);
  166.  
  167. printArray(Array, 6);
  168. printf(" обменов: %4d сравнений: %4d \n", swaping, comparisons);
  169.  
  170. swaping = 0, comparisons = 0;
  171. bubbleSorting(0, 6, &swaping, &comparisons, Array, cmpDecr);
  172.  
  173. printArray(Array, 6);
  174. printf(" обменов: %4d сравнений: %4d \n", swaping, comparisons);
  175.  
  176. printf("Сортировка вставкой: \n");
  177.  
  178. selectionSorting(0, 6, &swaping, &comparisons, Array2);
  179.  
  180. printArray(Array2, 6);
  181. printf(" обменов: %4d сравнений: %4d \n", swaping, comparisons);
  182.  
  183. swaping = 0, comparisons = 0;
  184. selectionSorting(0, 6, &swaping, &comparisons, Array2);
  185.  
  186. printArray(Array2, 6);
  187. printf(" обменов: %4d сравнений: %4d \n", swaping, comparisons);
  188.  
  189. swaping = 0, comparisons = 0;
  190. selectionSorting(0, 6, &swaping, &comparisons, Array2, cmpDecr);
  191.  
  192. printArray(Array2, 6);
  193. printf(" обменов: %4d сравнений: %4d \n", swaping, comparisons);
  194. }
  195.  
  196. int main()
  197. {
  198. srand(time(0));
  199.  
  200. setlocale(LC_ALL, "Rus");
  201.  
  202.  
  203. FirstTask();
  204.  
  205. int a;
  206. std::cin >> a;
  207.  
  208. int step = 10;
  209. size_t size = 100;
  210. int swaping = 0;
  211. int comparisons = 0;
  212.  
  213. int *Array = new int[size];
  214. int *SortingArray = new int[size];
  215.  
  216. fillRandInt(Array, size, 0, 1000);
  217. fillRandInt(SortingArray, size, 0, 1000);
  218.  
  219. printf("+------------+---------------------------------------------+--------------------------------------------+\n");
  220. printf("| | Сортировка пузырьком | Сортировка вставкой |\n");
  221. printf("| Размер +----------------------+----------------------+---------------------+----------------------+\n");
  222. printf("| | Сравнений | Обменов | Сравнений | Обменов |\n");
  223. printf("+------------+----------------------+----------------------+---------------------+----------------------+\n");
  224.  
  225. for (size_t i = 0; i <= size; i += step)
  226. {
  227. copyNElments(Array, SortingArray, i);
  228.  
  229. swaping = 0, comparisons = 0;
  230. bubbleSorting(0, i - 1, &swaping, &comparisons, SortingArray);
  231.  
  232. printf("| %10d | %20d | %20d |", i, comparisons, swaping);
  233.  
  234. copyNElments(Array, SortingArray, i);
  235.  
  236. swaping = 0, comparisons = 0;
  237. selectionSorting(0, i - 1, &swaping, &comparisons, SortingArray);
  238.  
  239. printf("%20d | %20d |\n", comparisons, swaping);
  240.  
  241. printf("+------------+----------------------+----------------------+---------------------+----------------------+\n");
  242. }
  243.  
  244.  
  245. system("pause");
  246. }
Advertisement
Add Comment
Please, Sign In to add comment