Cod sursa(job #821683)

Utilizator daniel.pDaniel daniel.p Data 22 noiembrie 2012 16:31:32
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
# include <cstdio>
# include <algorithm>
# include <fstream>
# include <iostream>
# include <vector>

#define NMAX 50000

using namespace std;


FILE *f1=fopen("algsort.in","r"),*f2=fopen("algsort.out","w");
vector <int> V;

int n;

void read ()
{
    int x;
    fscanf(f1,"%d\n",&n);
    for( int i=1; i<=n; ++i )
    {
        fscanf(f1,"%d ",&x);
        V.push_back(x);
    }
}


int part (int p, int r)
{
    int x,i;
    x=V[r];
    i=p-1;
    for(int j=p;j<r;++j)
        if (V[j]<=x)
        {
            i++;
            swap(V[j],V[i]);
        }
    i++;
    swap(V[i],V[r]);
    return i;
}

int rand_part(int p, int r)
{
    int i;

    srand(time(NULL));
    i=rand()%(r-p+1) + p;

    swap (V[i],V[r]);
    return part(p,r);
}

void qsort(int p, int r)
{
    int q;
    if(p<r)
    {
        q=rand_part(p,r);
        qsort(p,q-1);
        qsort(q+1,r);
    }
}

int main (void)
{
    read ();

    qsort( 0, n-1 );
    for ( int i=0; i<V.size(); ++i )
        fprintf(f2,"%d ",V[i]);
    fprintf(f2,"\n");
    fclose(f1);
    fclose(f2);
    return 0;
}