c++#include<iostream>using namespace std;#define LEFT(i) (2*(i)+1)#define RIGHT(i) (2*(i)+2)#define PARENT(i) ((i)-1)/2void display(int arr[],int heap_size);void max_heapify(int arr[],int i,int heap_size);void build_max_heap(int arr[],int heap_size);void heap_sort(int arr[],int heap_size);int main(){int arr[]={9,8,7,6,5,4,3,2,1};int size=sizeof(arr)/sizeof(int);display(arr,size);heap_sort(arr,size);display(arr,size);return 0;}void display(int arr[],int heap_size){for(int i=0;i<heap_size;i++)cout<<arr[i]<<' ';cout<<endl;}void max_heapify(int arr[],int i,int heap_size){int l=LEFT(i);int r=RIGHT(i);int largest=i;if (l<heap_size&&arr[l]>arr[largest]) {largest=l;}if (r<heap_size&&arr[r]>arr[largest]) {largest=r;}if (i!=largest) {int temp=arr[i];arr[i]=arr[largest];arr[largest]=temp;max_heapify(arr,largest,heap_size);}}void build_max_heap(int arr[],int heap_size){for(int i=(heap_size-2)/2;i>=0;i--) {max_heapify(arr,i,heap_size);}}void heap_sort(int arr[],int heap_size){build_max_heap(arr,heap_size); int temp; for(int i = heap_size - 1; i >= 0; i--) { temp = arr[0]; arr[0] =arr[i]; arr[i] = temp; max_heapify(arr, 0, i); }}