编辑代码

#include <stdio.h>

//将元素k作为根的子树进行调整
void HeapAdjust(int Heap[],int k ,int len){
	Heap[0] = Heap[k];          //Heap[0] 暂存子树的根节点
	for(int i=2*k;i <= len;i*=2){       //沿着key值较大的子节点向下筛选
		if(i < len && Heap[i] < Heap[i+1])  //记录两个子节点中较大值的下标
			i++;
		if(Heap[0] > Heap[i])               //比较父节点和较大子节点的大小
			break;
		else{                               //若根小于较大者则交换
			Heap[k] = Heap[i];
			k = i;                      //修改k值,进行下一次调整
		}
	}
	Heap[k] = Heap[0];                  //最后将原父节点放回应该的位置
} 

void BulidMaxHeap(int Heap[],int len){
	for(int i = len/2;i>0;i--)
		HeapAdjust(Heap,i,len);
}

void display(int Heap[],int len){
	for(int i =1;i <= len;i++){
		printf("%d ",Heap[i]);
	}
}

int main(){
	int Heap[] = {0,9,15,30,44,32,50,60};
	int len = sizeof(Heap) / sizeof(int) - 1;
	BulidMaxHeap(Heap,len);
	display(Heap,len);
	return 0;
}