33,311
社区成员
发帖
与我相关
我的任务
分享
#include <cstdlib>
#include <iostream>
using namespace std;
int parent(int i)
{return (i/2);}
int left(int i)
{return (2*i);}
int right(int i)
{return (2*i+1);}
void max_tree(int *a,int i,int n)
{
int l,r,largest ;
l= left(i),r=right(i);
if((l <=n)&& (a[l-1]>a[i-1]))
largest =l;
else
largest =i;
if(r <= n&& a[r-1]>a[largest-1])
largest =r;
if(largest !=i)
{
r=a[i-1];
a[i-1]=a[largest-1];
a[largest-1]=r;
max_tree(a, largest, n) ;
}
}
int build_tree(int *a,int n)
{
int i;
for(i=n/2;i>0;i--)
max_tree(a,i,n);
return 1;
}
int main()
{
int a[10]={1,2,4,5,6,7,8,9,3,0},n=10;
int *p;
p=&a[0];
build_tree(p,n);
getchar();
}