Cod sursa(job #642844)

Utilizator SimeneSimene Robert Simene Data 2 decembrie 2011 13:40:06
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include<stdio.h>
using namespace std;
bool ASC=true, DESC=false;
int a[530000];
void bS(int,int,bool);
void bM(int,int,bool);

     void bS(int lo, int n, bool dir)
    {
        if (n>1)
        {
            int m=n/2;
            bS(lo, m, ASC);
            bS(lo+m, m, DESC);
            bM(lo, n, dir);
        }
    }

     void bM(int lo, int n, bool dir)
    {
        if (n>1)
        {
            int m=n/2;
            for (int i=lo; i<lo+m; i++)
                if (dir==(a[i]>a[i+m])) a[i]=a[i]^a[i+m]^(a[i+m]=a[i]);
            bM(lo, m, dir);
            bM(lo+m, m, dir);
        }
    }
int putere(int m)
{int k=1;
    while (k<m/2+1)
    k=k*2;
    if (k*2!=m) m=k*2;
return m;
}
int main()
{int i,N,M;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
    scanf("%d",&M);
    N=M;

for (i=0;i<M;i++)
    scanf("%d",&a[i]);
M=putere(M);
for (i=N+1;i<M;i++)
    a[i]=0;
bS(0,M, ASC);

for (i=M-N;i<M;i++)
    printf("%d\n",a[i]);
return 0;
}