loulett

HW2_binary_heap

Nov 23rd, 2014
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3.  
  4. void swap(int &a, int &b)
  5. {
  6.     int t = a;
  7.     a = b;
  8.     b = t;
  9. }
  10.  
  11. void siftup(int * heap, int i)
  12. {
  13.     while (heap[i] < heap[(i - 1) / 2])
  14.     {
  15.         swap(heap[i], heap[(i-1)/2]);
  16.         i = (i - 1) / 2;
  17.     }
  18. }
  19.  
  20. void siftdown(int * heap, int i, int n)
  21. {
  22.     int left = 0, right = 0, j = 0;
  23.     while (2 * i + 1 < n)
  24.     {
  25.         left = 2 * i + 1;
  26.         right = 2 * i + 2;
  27.         j = left;
  28.         if (right < n && heap[right] < heap[left])
  29.             j = right;
  30.         if (heap[i] < heap[j])
  31.             return;
  32.         swap(heap[i], heap[j]);
  33.         i = j;
  34.     }
  35. }
  36.  
  37. void add(int * heap, int i, int &n)
  38. {
  39.     n++;
  40.     heap[n - 1] = i;
  41.     siftup(heap, n - 1);
  42. }
  43.  
  44. int delete_min(int *heap, int &n)
  45. {
  46.     int min = heap[0];
  47.     heap[0] = heap[n - 1];
  48.     n--;
  49.     siftdown(heap, 0, n);
  50.     return min;
  51. }
  52.  
  53. int main()
  54. {
  55.     int n = 5;
  56.     int heap[] = { 1, 2, 3, 5, 6, 0 };
  57.     add(heap, 4, n);
  58.     printf("%i\n", delete_min(heap, n));
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment