建堆

题目描述

    给出一个长为N(N<=100000)的整数序列,建立一个大根堆,从1至N输出堆中元素

输入

第一行一个数N,表示数列长度
第2至N+1行,每行一个正整数

输出

输出N行,每行一个数。

样例输入 

5

4

3

1

8

1

样例输出 

8

4

1

3

1

题思路

       这道题的题目描述写的很明白,建大根堆。模板题,只要把模板套套上去就可以了。

代码:(请不要直接拷贝哦)

#include

int a[100005],n;

using namespace std;

void dfs(int x)

{

       intl,r,z;

       l=x*2;

       r=x*2+1;

       if(l<=n)

       {

              z=l;

              if((r<=n)&&(a[r]>a[l]))

                z=r;

              if(a[z]>a[x])

              {

                     intt=a[z];

                     a[z]=a[x];

                     a[x]=t;

                     dfs(z);

              }

       }

}

int main()

{

       scanf("%d",&n);

       for(int i=1;i<=n;i++)

         scanf("%d",&a[i]);

       for(int i=n/2;i>=1;i--)

         dfs(i);

       for(int i=1;i<=n;i++)

         printf("%d\n",a[i]);

       return0;

}

你可能感兴趣的:(堆排序)