fork download
  1. #include <iostream>
  2.  
  3. void max_heapify(int arr[], int i, int si)
  4. {
  5. int largest, l = (2*i) + 1, r = l + 1;
  6.  
  7.  
  8. if(l < si && arr[l] > arr[i])
  9. largest = l;
  10. else
  11. largest = i;
  12.  
  13. if(r < si && arr[r] > arr[largest])
  14. largest = r;
  15.  
  16. if(largest != i)
  17. {
  18. int temp = arr[i];
  19. arr[i] = arr[largest];
  20. arr[largest] = temp;
  21. max_heapify(arr, largest, si);
  22. }
  23. }
  24.  
  25. void build_max_heap(int arr[], int si)
  26. {
  27. for(int i = (si/2) - 1; i >=0; i--)
  28. max_heapify(arr, i, si);
  29. }
  30.  
  31. void heap_sort(int arr[], int si)
  32. {
  33. build_max_heap(arr, si);
  34. int sz = si;
  35. for(int i = si - 1;i > 0; i--)
  36. {
  37. int temp = arr[i];
  38. arr[i] = arr[0];
  39. arr[0] = temp;
  40. sz--;
  41. max_heapify(arr, 0, sz);
  42. }
  43. }
  44.  
  45. int main()
  46. {
  47. int a[10] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
  48. int s = sizeof(a)/sizeof(int);
  49. heap_sort(a, s);
  50. for(int i = 0;i < s; i++){
  51. std::cout << a[i] << " ";
  52. }
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
1 2 3 4 7 8 9 10 14 16