Advertisement
artemgf

Untitled

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