Cod sursa(job #240307)

Utilizator Mishu91Andrei Misarca Mishu91 Data 7 ianuarie 2009 10:45:05
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>

#define MAX_N 500005

long V[MAX_N];
int N;

inline void swap(long &a, long &b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

void citire()
{
    scanf("%d",&N);
    for(int i = 1; i <= N; ++i)
    {
        scanf("%ld ",V+i);
        int j = i;
        while(j/2 && V[j] > V[j/2])
            swap(V[j], V[j/2]);
    }
}

void solve()
{
    int Nh = N;
    for(int k = 1; k < N; ++k)
    {
        swap(V[1], V[Nh]);
        --Nh;

        int i;
        i = 1;

        while(1)
        {
            int j = 2*i;
            if(j > Nh) break;
            if(j < Nh && V[j+1] > V[j]) ++j;
            if(V[j] < V[i]) break;

            swap(V[i], V[j]);
            i = j;
        }
    }
    for(int i = 1; i <= N; ++i)
        printf("%ld ", V[i]);
}

int main()
{
    freopen("algsort.in","rt",stdin);
    freopen("algsort.out","wt",stdout);

    citire();
    solve();
}