}
int parent(int i){
return i/2;
}
int left_child(int i){
return 2*i;
}
int right_child(int i){
return 2*i+1;
}
void max_heapify(int a[],int i,int 团御枝heap_size){
int largest;
int n;
int l=left_child(i);
int r=right_child(i);
if((l<=heap_size)&&(a[l]>a[i]))
largest=l;
else
largest=i;
if((r<=heap_size)&&(a[r]>a[largest]))
largest=r;
if(largest!=i){
n=a[largest];
a[largest]=a[i];
a[i]=n;
max_heapify(a,largest,heap_size);
}}
void build_max_heap(int a[],int heap_size){
拆知 int i;
for(i=heap_size/2;i>=0;i--)
max_heapify(a,i,heap_size);
}
void heap_sort(int a[],int heap_size){
int i,n;
build_max_heap(a,heap_size);
for(i=heap_size;i>=1;i--){
n=a[i];
a[i]=a[0];
a[0]=n;
heap_size--;
max_heapify(a,0,heap_size);
}
}
