#include
void swap(int tree[],int n,int t)
{
int temp;
temp=tree[n];
tree[n]=tree[t];
tree[t]=temp;
}
void build_heap(int tree[],int n){
//创建堆
for(int i=n/2-1;i>=0;i--)// n/2-1是最底部最右边的一家的父节点 最后一个家的父节点
{
//堆化 将顶节点和左右子节点 堆化 顶节点大于子节点
if((2*i+1)
if(tree[i] swap(tree,i,2*i+1);}
}
if((2*i+2)
if(tree[i]swap(tree,i,2*i+2);}//创建时,如果一开始父节点比子节点小则替换。-这是具体堆化过程
}
}
}
void build_sort(int tree[],int n){
//
build_heap(tree,n);//从底部的父节点开始堆化,则每家都选出来最大的父,最后顶部就是家族最大的根祖宗。
for(int i=n-1;i>=0;i--)
{
std::cout<
int tree[]={11,10,9,12,13,1,2,6,8,4,5,3};
int n=sizeof(tree)/sizeof(*tree);
build_sort(tree,n);
for(int i=0;i
std::cout<