Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. #include<iostream>
  2. #include <chrono>
  3. using namespace std;
  4.  
  5. //Прототипы функций
  6. void SheikerSort(int* arr, int arrSize);
  7. int* Merge_sort(int* up, int* down, unsigned int left, unsigned int right);
  8.  
  9. int main()
  10. //Массив
  11. {
  12. srand(time(0));
  13. const int arrSize = 20;
  14. int arr[arrSize] = { 1, 7, 6, 8, 8, 0, 21, 13, 20, 14, 24, 40, 11, 4, 13, 24, 19, 24, 13, 17 };
  15. cout << "Array: ";
  16. int l = arrSize - 1;
  17. for (int i = 0; i < arrSize; i++) {
  18. cout << arr[i] << " | ";
  19. }cout << endl << endl;
  20. //Массив после шейкероной сортировки
  21. SheikerSort(arr, arrSize);
  22. cout << "SheikerSort Array: ";
  23. for (int i = 0; i < arrSize; i++) {
  24. cout << arr[i] << " | ";
  25. }
  26.  
  27.  
  28. int arr2[arrSize] = { 1, 7, 6, 8, 8, 0, 21, 13, 20, 14, 24, 40, 11, 4, 13, 24, 19, 24, 13, 17 };
  29.  
  30. int* arr3 = Merge_sort(arr2, arr, 0, l); //Вот тут шо делать?
  31. cout << "\nMergeSort Array: ";
  32. for (int i = 0; i < arrSize; i++) {
  33. cout << arr3[i] << " | ";
  34. }
  35.  
  36.  
  37. getchar();
  38. }
  39.  
  40.  
  41.  
  42. //Функция Шейкерной Сортировки
  43. void SheikerSort(int* arr, int arrSize)
  44. {
  45. int left, right, i, k, temp;
  46. k = left = 0;
  47. right = arrSize - 2;
  48. while (left <= right)
  49. {
  50. for (i = left; i <= right; i++)
  51. if (arr[i] > arr[i + 1])
  52. {
  53. temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp;
  54. k = i;
  55. }
  56. right = k - 1;
  57. for (i = right; i >= left; i--)
  58. if (arr[i] > arr[i + 1])
  59. {
  60. temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp;
  61. k = i;
  62. }
  63. left = k + 1;
  64. }
  65. }
  66.  
  67. //Функция Сортировка слиянием
  68.  
  69. int* Merge_sort(int* up, int* down, unsigned int left, unsigned int right)
  70. {
  71. if (left == right)
  72. {
  73. down[left] = up[left];
  74. return down;
  75. }
  76.  
  77. unsigned int middle = (left + right) / 2;
  78.  
  79. // разделяй и сортируй
  80. int* l_buff = Merge_sort(up, down, left, middle);
  81. int* r_buff = Merge_sort(up, down, middle + 1, right);
  82.  
  83. // слияние двух отсортированных половин
  84. int* target = l_buff == up ? down : up;
  85.  
  86. unsigned int l_cur = left, r_cur = middle + 1;
  87. for (unsigned int i = left; i <= right; i++)
  88. {
  89. if (l_cur <= middle && r_cur <= right)
  90. {
  91. if (l_buff[l_cur] < r_buff[r_cur])
  92. {
  93. target[i] = l_buff[l_cur];
  94. l_cur++;
  95. }
  96. else
  97. {
  98. target[i] = r_buff[r_cur];
  99. r_cur++;
  100. }
  101. }
  102. else if (l_cur <= middle)
  103. {
  104. target[i] = l_buff[l_cur];
  105. l_cur++;
  106. }
  107. else
  108. {
  109. target[i] = r_buff[r_cur];
  110. r_cur++;
  111. }
  112. }
  113. return target;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement