Cod sursa(job #1308158)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 3 ianuarie 2015 17:51:05
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
using namespace std;

unsigned long int m[3000000],stanga[3000000],dreapta[3000000];
int n,ns,nd;

void quick(int st, int dr, int x)
{
    int i,c=0,as,ad;
    ns=0;
    nd=0;
    for(i=st;i<=dr;i++)
    {
        if(m[i]<x)
        {
            stanga[ns]=m[i];
            ns++;
        }
        if(m[i]>x)
        {
            dreapta[nd]=m[i];
            nd++;
        }
        if(m[i]==x)
            c++;
    }
    for(i=0;i<ns;i++)
        m[st+i]=stanga[i];
    for(i=ns;i<ns+c;i++)
        m[st+i]=x;
    for(i=ns+c;i<ns+c+nd;i++)
        m[st+i]=dreapta[i-ns-c];
    as=ns;
    ad=nd;
    if(as>1)
        quick(st,st+as-1,m[(st+st+as-1)/2]);
    if(ad>1)
        quick(dr-ad+1,dr,m[(dr-ad+1+dr)/2]);
}
int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d ", &n);
    int i;
    for(i=0;i<n;i++)
        scanf("%u ", &m[i]);
    quick(0,n-1,m[(n-1)/2]);
    for(i=0;i<n;i++)
        printf("%u ", m[i]);
    return 0;
}