fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. void siftDown(int *numbers, int root, int bottom)
  5. {
  6. int maxChild;
  7. int done = 0;
  8.  
  9. while ((root * 2 <= bottom) && (!done))
  10. {
  11. if (root * 2 == bottom)
  12. maxChild = root * 2;
  13. else if (numbers[root * 2] > numbers[root * 2 + 1])
  14. maxChild = root * 2;
  15. else
  16. maxChild = root * 2 + 1;
  17.  
  18. if (numbers[root] < numbers[maxChild])
  19. {
  20. int temp = numbers[root];
  21. numbers[root] = numbers[maxChild];
  22. numbers[maxChild] = temp;
  23. root = maxChild;
  24. }
  25. else
  26. done = 1;
  27. }
  28. }
  29.  
  30. void heapSort(int *numbers, int array_size)
  31. {
  32.  
  33. for (int i = (array_size / 2) - 1; i >= 0; i--)
  34. siftDown(numbers, i, array_size);
  35.  
  36. for (int i = array_size - 1; i >= 1; i--)
  37. {
  38. int temp = numbers[0];
  39. numbers[0] = numbers[i];
  40. numbers[i] = temp;
  41. siftDown(numbers, 0, i - 1);
  42. }
  43. }
  44. int main()
  45. {
  46. int n;
  47. cin >> n;
  48. int* mas = new int[n];
  49. for (int i = 0;i < n;i++)
  50. {
  51. cin >> mas[i];
  52. }
  53.  
  54.  
  55. heapSort(mas, n);
  56. for (int i = 0;i < n;i++) {
  57. cout << mas[i] << ' ';
  58. }
  59.  
  60.  
  61. delete[] mas;
  62.  
  63. return 0;
  64. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Standard output is empty