输入格式:

输入第一行给出正整数N≤105),随后一行给出N个(长整型范围内的)整数,其间以空格分隔。

输出格式:

在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。

输入样例:

11
4 981 10 -17 0 -20 29 50 8 43 -5

输出样例:

-20 -17 -5 0 4 8 10 29 43 50 981
#include <bits/stdc++.h>
void HeapAdjust(int a[], int s, int m)
{
    a[0] = a[s];
    for(int i = 2 * s; i <= m; i *= 2)
    {
        if(i < m && a[i] < a[i + 1])
            ++i;
        if(a[i] <= a[0]) break;
        else
        {
            a[s] = a[i];
            s  = i;
        }
    }
    a[s] = a[0];
}
int main()
{
    int N;
    int a[100010];
    scanf("%d", &N);
    for(int i = 1; i <= N; ++i)
        scanf("%d", &a[i]);
    //初始化最大堆
    for(int i = N / 2; i > 0; --i)
        HeapAdjust(a, i, N);
    for(int i = N; i > 0; --i)
    {
        a[0] = a[1];
        a[1] = a[i];
        a[i] = a[0];
        HeapAdjust(a, 1, i - 1);
    }
    printf("%d", a[1]);
    for(int i = 2; i <= N; ++i)
        printf(" %d", a[i]);
}