Advertisement
allia

куча

Oct 12th, 2020 (edited)
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. void sift (int *arr, int first, int last)
  7.  
  8.  {
  9.   int j = first;
  10.   int k = first*2+1;
  11.  
  12.   while (k <= last)
  13.   {
  14.     if (k < last && arr[k] < arr[k+1])
  15.      k++; // больший сын
  16.      if (arr[j] < arr[k])
  17.      {
  18.         swap(arr[j], arr[k]);
  19.          j = k;
  20.          k = k*2+1;
  21.      }
  22.    else break;
  23.  }
  24. }
  25.  
  26. void sort (int *arr, int razmer)
  27. {
  28.   for (int i = razmer/2; i >= 0; i--)
  29.    sift (arr, i, razmer-1);
  30.  
  31.  for (int m = razmer-1; m >= 1; m--)
  32.  {
  33.    swap(arr[0], arr[m]);
  34.    sift (arr, 0, m-1);
  35.  }
  36. }
  37.  
  38. int main()
  39. {
  40.   int n=0;
  41.   cin >> n;
  42.  
  43.   int *arr = new int[n];
  44.  
  45.   for (int i=0; i<n; i++)
  46.    cin >> arr[i];
  47.  
  48.   sort (arr, n);
  49.  
  50.   for (int i=0; i<n; i++)
  51.    cout << arr[i] << " ";
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement