Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define cin fin
  5. #define cout fout
  6. #define sp << " " <<
  7. #define nl << "\n"
  8.  
  9. ifstream fin("prob.in");
  10. ofstream fout("prob.out");
  11.  
  12. int n, i, j, h[100], k, y, a;
  13. void heapsort(int arr[], int n) {
  14.  
  15. bool swapped = true;
  16.  
  17. int j = 0;
  18.  
  19. int tmp;
  20.  
  21. while (swapped) {
  22.  
  23. swapped = false;
  24.  
  25. j++;
  26.  
  27. for (int i = 0; i < n - j; i++) {
  28.  
  29. if (arr[i] < arr[i + 1]) {
  30.  
  31. tmp = arr[i];
  32.  
  33. arr[i] = arr[i + 1];
  34.  
  35. arr[i + 1] = tmp;
  36.  
  37. swapped = true;
  38.  
  39. }
  40.  
  41. }
  42.  
  43. }
  44.  
  45. }
  46. void insert(int a) {
  47. n++;
  48. k++;
  49. h[k] = a;
  50. }
  51.  
  52. void aranjeaza(int nn) {
  53. int x;
  54. x = h[nn];
  55. while (nn > 1 && x > h[nn / 2]) {
  56. h[nn] = h[nn / 2];
  57. nn = nn / 2;
  58. }
  59. h[nn] = x;
  60. }
  61.  
  62. void down(int n) {
  63. int fiu = -1;
  64. while (fiu != 0) {
  65. if (2 * n <= k)
  66. fiu = 2 * n;
  67.  
  68. if (2 * n + 1 <= k && h[2 * n + 1] >= h[fiu])
  69. fiu = 2 * n + 1;
  70. if (h[fiu] <= h[n])
  71. fiu = 0;
  72. if (fiu) {
  73. swap(h[n], h[fiu]);
  74. n = fiu;
  75. }
  76. }
  77. }
  78. void stergerea() {
  79. if (k < 1) return;
  80. cout << h[1]<<" ";
  81. h[1] = h[k];
  82. k--;
  83. n--;
  84. down(1);
  85. }
  86.  
  87. void siftDown(int *numbers, int root, int bottom)
  88. {
  89. int maxChild;
  90. int done = 0;
  91. while ((root * 2 <= bottom) && (!done))
  92. {
  93. if (root * 2 == bottom)
  94. maxChild = root * 2;
  95.  
  96. else if (numbers[root * 2] > numbers[root * 2 + 1])
  97. maxChild = root * 2;
  98. else
  99. maxChild = root * 2 + 1;
  100.  
  101. if (numbers[root] < numbers[maxChild])
  102. {
  103. int temp = numbers[root];
  104. numbers[root] = numbers[maxChild];
  105. numbers[maxChild] = temp;
  106. root = maxChild;
  107. }
  108. else
  109. done = 1;
  110. }
  111. }
  112.  
  113. void heapSort(int *numbers, int array_size)
  114. {
  115.  
  116. for (int i = (array_size / 2) - 1; i >= 0; i--)
  117. siftDown(numbers, i, array_size - 1);
  118.  
  119. for (int i = array_size - 1; i >= 1; i--)
  120. {
  121. int temp = numbers[0];
  122. numbers[0] = numbers[i];
  123. numbers[i] = temp;
  124. siftDown(numbers, 0, i - 1);
  125. }
  126. }
  127. int main() {
  128. int t;
  129. k = 0;
  130. while (cin >> t) {
  131. insert(t);
  132. aranjeaza(k);
  133. }
  134.  
  135. cout << "Max-heapul : " << endl;
  136. for (i = 1; i <= k; i++)
  137. cout << h[i] << " ";
  138. cout nl;
  139.  
  140.  
  141. cout << "Max " nl ;
  142.  
  143. for (int i = 1; i <= 3; i++) {
  144. stergerea();
  145. }
  146. cout nl;
  147.  
  148. if (k == 0) {
  149. cout << "Heapul este gol!" nl;
  150. } else {
  151.  
  152. cout << "Max-heapul modificat: " << endl;
  153. for (i = 1; i <= k; i++)
  154. cout << h[i] << " ";
  155. cout << endl;
  156. }
  157. int h1[1000];
  158. for(i=0;i<k;i++)
  159. {
  160. h1[i]=h[i+1];
  161. }
  162.  
  163. heapsort(h1,k);
  164. for (i = 0; i < k; i++)
  165. cout << h1[i] << " ";
  166. cout nl;
  167.  
  168.  
  169.  
  170.  
  171. return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement