Cod sursa(job #1236174)

Utilizator andru47Stefanescu Andru andru47 Data 1 octombrie 2014 16:50:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,i,a[500001],nn;
void CombHeap(int poz,int n)
{
    if (2*poz>n)return ;
    if (2*poz<=n)
    {
        if (2*poz+1<=n)
        {
            if (a[2*poz+1]>a[2*poz])
            {
                if (a[2*poz+1]>a[poz])
                {
                    swap(a[2*poz+1],a[poz]);
                    CombHeap(2*poz+1,n);
                }
            }
            else
            {
                if (a[2*poz]>a[poz])
                {
                    swap(a[2*poz],a[poz]);
                    CombHeap(2*poz,n);
                }
            }
        }
        else
        {
            if (a[2*poz]>a[poz])
            {
                swap(a[2*poz],a[poz]);
                CombHeap(2*poz,n);
            }
        }
    }
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d ",&n);
    for (i=1; i<=n; i++)
        scanf("%d ",&a[i]);
    for (i=n/2; i>=1; i--)
    {
        CombHeap(i,n);
    }
    nn=n;
    while (nn>0)
    {
        swap(a[1],a[nn]);
        nn--;
        CombHeap(1,nn);
    }
    for (i=1; i<=n; i++)
        printf("%d ",a[i]);
    return 0;
}