#include <iostream>
using namespace std;
void heapRebuild(int *data, int pos, int len)
{
int largeIndex = pos;
int leftChileIndex = pos * 2;
if(leftChileIndex <= len && data[leftChileIndex] > data[pos])
largeIndex = leftChileIndex;
int rightChildIndex = leftChileIndex + 1;
if(rightChildIndex <= len && data[rightChildIndex] > data[largeIndex])
largeIndex = rightChildIndex;
if(largeIndex != pos)
{
swap(data[pos],data[largeIndex]);
heapRebuild(data, largeIndex, len);
}
}
void heapCreat(int *data, int len)
{
for(int i = len/2; i >= 0;i--)
heapRebuild(data,i,len);
}
void display(int *data, int len)
{
for(int i = 0; i < len; i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
void heapSort(int *data, int len)
{
heapCreat(data,len);
for(int i = 0; i < len - 1; i++)
{
swap(data[0],data[len - i - 1]);
heapRebuild(data,0,len - i - 2);
display(data,len);
}
}
int main()
{
int arr[10] = {12,34,75,32,12,68,34,13,41,23};
heapSort(arr,10);
return 0;
}