Advertisement
Guest User

Untitled

a guest
Aug 5th, 2015
14
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. template <class Item>
  2. void d_ary_fixDown2(Item a[], int node, int n){
  3.     int first_child = node*d + 1 - (d - 1);
  4.     int last_child = node*d + 1;
  5.     int max_child = first_child;    /*Начнем с самого первого*/
  6.  
  7.     while(node*d + 1 - (d - 1) <= n){
  8.         int j = node*d + 1 - (d - 1);
  9.        
  10.         /*Ищем максимального потомка среди всех d потомков узла node*/
  11.         for(int i = first_child; i <= last_child; i++)
  12.             if(a[i] > a[max_child])
  13.                 max_child = i;
  14.         /*Если потомок max_child больше своего родителя, то меняем их местами*/
  15.         //if(a[max_child] > a[(max_child + d - 2) / d])
  16.         if(a[max_child] > a[node])
  17.             std::swap(a[max_child], a[(max_child + d - 2) / d]);
  18.  
  19.         node = j;
  20.         int first_child = node*d + 1 - (d - 1);
  21.         int last_child = node*d + 1;
  22.     }
  23. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement