今学习了一下最大堆的构造:
//最大堆的构造
#include<iostream>
using namespace std;
void createheap(int a[],int i)
{
int j=i/2,k,parent,flag;
int temp;
for(;j>=0;--j)//从底向上
{
parent=a[j];
flag=0;
//注意
while( 2*j+1<=i && !flag)
{
k=2*j+1;
//表示有两个子节点
if(k<i)
{
if(a[k]<a[k+1])k=k+1;
}
//如果父节点比大的子节点大
if(parent>=a[k])flag=1;
//交换
else
{
temp=a[j];
a[j]=a[k];
a[k]=temp;
j=k;
}
}
}
}
int main()
{
int a[10]={2,3,5,4,8,9,10,33,80,56};
int j;
createheap(a,9);
for(j=0;j<10;++j)
cout<<a[j]<<endl;
}