#include <stdio.h>
#include <stdlib.h>
void Display(int a[],int len){
for(int i=0;i<len;i++){
printf("%d ",a[i]);
}
printf("\n");
}
void Copy(int a[],int b[],int len,int state){
if(state==1){
for(int i=0;i<len;i++){
b[i+1]=a[i];
}
}
else if(state==2){
for(int i=0;i<len;i++){
a[i]=b[i+1];
}
}
}
void Heap(int b[],int len){
for(int index=2;index<len;index++){
int childIndex=index;
while(childIndex>1){
int parentIndex=childIndex/2;
if(b[parentIndex]<b[childIndex]){
int temp=b[parentIndex];
b[parentIndex]=b[childIndex];
b[childIndex]=temp;
childIndex=parentIndex;
}
else{
break;
}
}
}
}
void HeapSort(int a[],int len){
int b[len+1];
int lenOfB=sizeof(b)/sizeof(int);
Copy(a,b,len,1);
for(int i=lenOfB;i>1;i--){
Heap(b,i);
int temp=b[1];
b[1]=b[i-1];
b[i-1]=temp;
}
Copy(a,b,len,2);
}
int main(){
int a[]={5,3,6,64,8,2};
HeapSort(a,sizeof(a)/sizeof(int));
Display(a,sizeof(a)/sizeof(int));
int a2[]={2,12,2,31,12,34,5};
HeapSort(a2,sizeof(a2)/sizeof(int));
Display(a2,sizeof(a2)/sizeof(int));
int a3[]={5,0,0,0,0,0};
HeapSort(a3,sizeof(a3)/sizeof(int));
Display(a3,sizeof(a3)/sizeof(int));
return 0;
}