Cod sursa(job #1598281)

Utilizator Paula-ElenaPaula-Elena Margarit Paula-Elena Data 12 februarie 2016 19:27:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
/*
#include <fstream>
using namespace std;

const int MAXN = 500003;

void read( int &N, int v[] ) {
    ifstream fin("algsort.in");

    fin >> N;
    for ( int i = 0; i < N; ++i )
        fin >> v[i];
}

void quicksort( int v[], int first, int last ) {
    if ( last < first )
        return;

    int pivot = v[ first ];
    int i = first + 1;
    int j = last;

    while ( i < j ) {
        while ( i <= last && v[i] < pivot )
            ++i;
        while ( j >= 0 && v[j] > pivot )
            --j;
        if ( i < j )
            swap( v[i], v[j] );
    }

    swap( v[j], v[first] );

    quicksort( v, first, j-1 );
    quicksort( v, j+1, last );
}

void write( int N, int v[] ) {
    ofstream fout("algsort.out");

    for ( int i = 0; i < N; ++i )
        fout << v[i] << ' ';
}

int main () {
    int N, v[MAXN];

    read( N, v );
    quicksort( v, 0, N-1 );
    write( N, v );

    return 0;
}
*/


#include<fstream>
using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int v[500002], i, j, n, pivot, st, dr, aux;

void quicksort(int st, int dr){
    pivot = v[(st+dr)/2];
    i = st;
    j = dr;
    while(i <= j){
        while(v[j] > pivot) j--;
        while(v[i] < pivot) i++;
        if(i <= j){
        aux = v[i];
        v[i] = v[j];
        v[j] = aux;
        i++;
        j--;
        }
    }
    if(st < j) quicksort(st, j);
    if(i < dr) quicksort(i, dr);
}

int main(){

    fin >> n;
    for(i=1; i<=n; i++) fin >> v[i];

    quicksort(1, n);

    for(i=1; i<=n; i++) fout << v[i] << " ";

    return 0;
}