用数组来建立树的模型,每次要从m/2开始;
#include<bits/stdc++.h>
int a[11];
void dun(int s,int m)
{
int l=s;
int ll=2*s;
int lr=2*s+1;
int h;
if(s<=m/2)
{
if(ll<=m&&a[l]>a[ll])
{
l=ll;
}
if(lr<=m&&a[l]>a[lr])
{
l=lr;
}
if(s!=l)
{
h=a[s];
a[s]=a[l];
a[l]=h;
dun(l,m);
}
}
}
int main()
{
int n,m,i,j;
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d",&a[i]);
}
for(i=m/2;i>0;i--)
{
dun(i,m);
}
int num;
for(i=m+1;i<=n;i++)
{
scanf("%d",&num);
if(num>a[1])
{
a[1]=num;
dun(1,m);
}
}
for(i=m;i>=1;i--)
{
j=a[i];
a[i]=a[1];
a[1]=j;
dun(1,i-1);
}
printf("%d",a[1]);
for(i=2;i<=m;i++)
{
printf(" %d",a[i]);
}
printf("\n");
}