Cod sursa(job #1017917)

Utilizator stefyvoltFMI Stefan Niculae stefyvolt Data 28 octombrie 2013 17:06:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

ifstream f ("algsort.in");
ofstream g ("algsort.out");
int n, v[500002];

void quicksort(int v[20], int a=1, int b=n)
{
    int i=a, j=b, p=v[(a+b)/2];         // v[i=a ... p ... j = b]

    while(i <= j)                       // cat timp i nu a ajuns la j
    {
        while(v[i] < p) i++;            // crestem i pana ajungem la pivot
        while(v[j] > p) j--;            // scadem j pana la pivot

        if(i <= j)                      // daca elementele la care ne-am oprit sunt de parti opuse ale pivotului
        {
            int aux = v[i];
            v[i] = v[j];
            v[j] = aux; // le interschimbam valorile
            i++; j--;                   // si le lasam sa continue drumul
        }
    }

    if(a < j) quicksort(v,a,j);         // apelam QS in subvectorul din stanga
    if(i < b) quicksort(v,i,b);         // apelam QS in dreapta
}

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

    quicksort(v);

    for(int i=1; i<=n; i++) g << v[i] << ' ';

    return 0;
}