Little_hobbit

Сортировка - Heap Sort

Jun 29th, 2020
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. // Процедура просеивания пирамиды
  2. void Sift(int *arr, int start, int length)
  3. {
  4.     int id_left, id_right, max, t, i = start;
  5.     char flag = 1;
  6.  
  7.     while ((i < length) && flag)
  8.     {
  9.         if (2 * i + 1 < length)
  10.         {
  11.             if (2 * i + 1 == length - 1)
  12.             {
  13.                 max = 2 * i + 1;
  14.             }
  15.             else
  16.             {
  17.                 id_left = 2 * i + 1;
  18.                 id_right = (i + 1) * 2;
  19.                 max = (arr[id_left] >= arr[id_right]) ? id_left : id_right;
  20.             }
  21.  
  22.             if (arr[i] <= arr[max])
  23.             {
  24.                 t = arr[i];
  25.                 arr[i] = arr[max];
  26.                 arr[max] = t;
  27.             }
  28.  
  29.             i = max;
  30.         }
  31.         else
  32.             flag = 0;
  33.     }
  34. }
  35.  
  36.  
  37. // Процедура пирамидальной сортировки
  38. void HeapSort(int *arr, int length)
  39. {
  40.     for (int i = length / 2; i >= 0; i--)
  41.     {
  42.         Sift(arr, i, length);
  43.     }
  44.    
  45.     while (length > 0)
  46.     {
  47.         int t = arr[length - 1];
  48.         arr[length - 1] = arr[0];
  49.         arr[0] = t;
  50.         length--;
  51.  
  52.         Sift(arr, 0, length);
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment