Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1.  
  2. template< class T >
  3. void downHeap(T a[], long k, long n)
  4. {
  5.     //  процедура просеивания следующего элемента
  6.     //  До процедуры: a[k+1]...a[n]  - пирамида
  7.     //  После:  a[k]...a[n]  - пирамида
  8.     T new_elem;
  9.     long child;
  10.     new_elem = a[k];
  11.    
  12.     while(k <= n/2) // пока у a[k] есть дети
  13.     {      
  14.         child = 2*k;
  15.        
  16.         if( child < n && a[child] < a[child+1] ) //  выбираем большего сына
  17.             child++;
  18.         if( new_elem >= a[child] )
  19.             break;
  20.         // иначе
  21.         a[k] = a[child];    // переносим сына наверх
  22.         k = child;
  23.     }
  24.     a[k] = new_elem;
  25. }
  26.  
  27. template< class T >
  28. void heapSort(T a[], long size)
  29. {
  30.     long i;
  31.     T temp;
  32.  
  33.   // строим пирамиду
  34.     for(i = size / 2 - 1; i >= 0; --i)
  35.         downHeap(a, i, size-1);
  36.  
  37.   // теперь a[0]...a[size-1] пирамида
  38.  
  39.     for(i=size-1; i > 0; --i)
  40.     {
  41.         // меняем первый с последним
  42.         temp = a[i];
  43.         a[i] = a[0];
  44.         a[0] = temp;
  45.         // восстанавливаем пирамидальность a[0]...a[i-1]
  46.         downHeap(a, 0, i-1);
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement