Cod sursa(job #484206)

Utilizator popoiu.georgeGeorge Popoiu popoiu.george Data 12 septembrie 2010 19:24:05
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<cstdlib>
#define inf "algsort.in"
#define outf "algsort.out"
#define NMax 500100
using namespace std;

fstream f(inf,ios::in),g(outf,ios::out);

int v[NMax],n;

void read()
{
    f>>n;
    for(int i=1; i<=n; i++ ) f>>v[i];
}

int part(int li,int ls)
{
    int st = li, dr = ls;
    int x=0,y=-1;

    int p = li + rand() % (ls-li+1);
    swap( v[li], v[p] );

    while( st<dr )
    {
        if( v[st]>v[dr] )
        {
            swap( v[st], v[dr] );
            int t=y;
            y = -x;
            x = -t;
        }
        st += x; dr += y;
    }
    return st;
}

void sort(int li,int ls)
{
    if( li<ls )
    {
        int k = part(li,ls);
        sort(li,k);
        sort(k+1,ls);
    }
}

void solve()
{
    srand( time(NULL) );
    sort(1,n);
    for(int i=1; i<=n; i++) g<<v[i]<<" ";
}

int main()
{
	read(); solve();
	f.close(); g.close();
	return 0;
}