Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <atomic>
  3. using uint = unsigned int;
  4.  
  5. struct Heap
  6. {
  7.     uint arr[100];
  8.     uint size;
  9.     Heap()
  10.         : size(0)
  11.     {
  12.        
  13.     }
  14. };
  15.  
  16. void downHeap(Heap &heap, int i)
  17. {
  18.     uint left = 2 * i + 1;
  19.     uint right = 2 * i + 2;
  20.     uint largest = i;
  21.  
  22.     if ((left < heap.size) && (heap.arr[left] > heap.arr[i]))
  23.         largest = left;
  24.     else
  25.         largest = i;
  26.  
  27.     if ((right < heap.size) && (heap.arr[right] > heap.arr[i]))
  28.         largest = right;
  29.  
  30.     if (i != largest)
  31.     {
  32.         std::swap(heap.arr[largest], heap.arr[i]);
  33.         downHeap(heap, largest);
  34.     }
  35. }
  36.  
  37. void upHeap(Heap &heap, int i)
  38. {
  39.     if (i > 0)
  40.     {
  41.         uint parent = (i - 1) / 2;
  42.         if(heap.arr[i] > heap.arr[parent])
  43.         {
  44.             std::swap(heap.arr[parent], heap.arr[i]);
  45.             upHeap(heap, parent);
  46.         }
  47.     }
  48. }
  49.  
  50. void make_heap(Heap &heap)
  51. {
  52.     for (uint i = heap.size / 2; i > 0; --i)
  53.         downHeap(heap, i);
  54. }
  55.  
  56. void insert(Heap &heap, int value)
  57. {
  58.     heap.arr[heap.size] = value;
  59.     upHeap(heap, heap.size++);
  60. }
  61.  
  62. void show(Heap &heap)
  63. {
  64.     for (uint i = 0; i < heap.size; ++i)
  65.         std::cout << "Ojciec: " << heap.arr[i]
  66.         << " Dzeici: " << heap.arr[i * 2 + 1] << " " << heap.arr[i * 2 + 2] << std::endl;
  67. }
  68.  
  69. uint extract_max(Heap &heap)
  70. {
  71.     if (heap.size < 1)
  72.         std::cout << "BRAK DANYCH!" << std::endl;
  73.     else
  74.     {
  75.         int max = heap.arr[0];
  76.         std::swap(heap.arr[0], heap.arr[heap.size-- - 1]);
  77.         downHeap(heap, 0);
  78.  
  79.         return max;
  80.     }
  81.  
  82. }
  83.  
  84. void heapSort(Heap &heap)
  85. {
  86.     make_heap(heap);
  87.     int n = heap.size;
  88.     for (uint i = n / 2; i > 0; --i)
  89.     {
  90.         std::swap(heap.arr[i], heap.arr[1]);
  91.         --n;
  92.         downHeap(heap, 0);
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement