void heap_adjust(int a[],int i,int size){
int temp;
int j = i*2 +1;
if(i<=size/2-1){ //保证其为非叶子节点----这里请注意
if(j+1<size&&a[j]<a[j+1]){
//找出子节点中值最大的
j++;
}
if(a[i]<a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
heap_adjust(a,j,size);
}
}
}
void make_heap(int a[],int size){
//i = (size -2)/2 但是这样写的话,对于size等于 1的情况会导致错误 ----这里请注意
for(int i=size/2-1;i>=0;i--){
heap_adjust(a,i,size);
}
}
void heap_sort(int a[],int size){
make_heap(a,size);
int temp;
for(int i=size-1;i>0;i--){
// a[0] <--> a[i] swap
temp = a[0];
a[0] = a[i];
a[i] = temp;
heap_adjust(a,0,i);
}
}