void swap(int* a,int* b){
int temp = *a;
*a = *b;
*b = temp;
}
void AdjustHeap(int* a, int index, int n){
if(index>=n/2)
return ;
int left = index*2 + 1;
int right = index*2 + 2;
int big = index;
if(a[left]>a[big])
big = left;
if(right<n&&a[right]>a[big])
big = right;
swap(&a[big], &a[index]);
if(big!=index)
AdjustHeap(a, big, n);
}
AdjustHeap
void swap(int* a,int* b){
int temp = *a;
*a = *b;
*b = temp;
}
void AdjustHeap(int* a, int index, int n){
while(index<n/2){
int left = index*2 + 1;
int right = index*2 + 2;
int big = index;
if(a[left]>a[big])
big = left;
if(right<n&&a[right]>a[big])
big = right;
if(big != index){
swap(&a[big], &a[index]);
index = big;
}else{
break;
}
}
}
BuildHeap
void BuildHeap(int* a, int n){
for(int i=n/2;i>=0;i--)
AdjustHeap(a, i, n);
}