void MaxifyHeap(int A[],int ind,int len)
{
int left = ind*2+1;
int right = left +1;
int max_ind = ind;
while(right<=len){
if(A[left]< A[max_ind] && A[right]< A[max_ind]){
break;
}
else if( A[left]< A[right] ){
swap(A[max_ind],A[right]);
max_ind = right;
}
else {
swap(A[max_ind],A[left]);
max_ind = left;
}
left = max_ind*2+1;
right = left +1;
}
}
void HeapBuild(int A[],int size){
for(int i = (size-1)/2 ; i>= 0;i--){
MaxifyHeap( A, i, size-1);
}
}
void HeapSort(int A[],int size){
HeapBuild(A,size);
for(int i = size-1;i> 0;i--){
swap(A[0],A[i]);
MaxifyHeap( A, 0 , i-1);
}
}
{
int left = ind*2+1;
int right = left +1;
int max_ind = ind;
while(right<=len){
if(A[left]< A[max_ind] && A[right]< A[max_ind]){
break;
}
else if( A[left]< A[right] ){
swap(A[max_ind],A[right]);
max_ind = right;
}
else {
swap(A[max_ind],A[left]);
max_ind = left;
}
left = max_ind*2+1;
right = left +1;
}
}
void HeapBuild(int A[],int size){
for(int i = (size-1)/2 ; i>= 0;i--){
MaxifyHeap( A, i, size-1);
}
}
void HeapSort(int A[],int size){
HeapBuild(A,size);
for(int i = size-1;i> 0;i--){
swap(A[0],A[i]);
MaxifyHeap( A, 0 , i-1);
}
}