Guest User

Pyramid_merge

a guest
May 18th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.59 KB | None | 0 0
  1. #include "pyramid_merge.h"
  2.  
  3. void Sift(int* H, int i, int n)
  4. {
  5.     // Просеивание в пирамиду
  6.     int j = 2*i, x = H[i];
  7.     if ((j < n) && (H[j + 1] < H[j]))
  8.         j++;
  9.     while ((j <= n) && (H[j] < x))
  10.     {
  11.         H[i] = H[j];
  12.         i = j;
  13.         j = 2*i;
  14.         if ((j < n) && (H[j + 1] < H[j]))
  15.             j++;
  16.     }
  17.     H[i] = x;
  18. }
  19.  
  20. int Heap_Sort(int* H)  
  21. {
  22.     int x, l = N/2 + 1, r = N;  
  23.     //Формирование пирамиды
  24.     while (l > 1) {
  25.         l--;
  26.         Sift(H, l, N);
  27.     }
  28.     //Сортировка  
  29.     while (r > 1) {
  30.         x = H[l];
  31.         H[l] = H[r];
  32.         H[r] = x;
  33.         r--;
  34.         Sift(H, l, N);
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment