Cod sursa(job #1545894)

Utilizator BugirosRobert Bugiros Data 7 decembrie 2015 12:41:14
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
using namespace std;

const int MAXN = 500005;

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

int n;
int v[MAXN];

void afisare()
{
    for (int i = 1;i <= n;++i)
        printf("%d ",v[i]);
    printf("\n");
}

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

void schimba(int &a, int &b)
{
    int aux = b;
    b = a;
    a = aux;
}

void sortare(int A[],int st, int dr)
{
    int pozpivot = rand() % (dr - st + 1) + st;
    int pivot = A[pozpivot];
    int i = st, j = dr;
    while (i <= j)
    {
        while(A[i] < pivot)
            ++i;
        while(A[j] > pivot)
            --j;
        if (i <= j)
        {
            schimba(A[i],A[j]);
            ++i;
            --j;
        }
    }

    if (st < j)
        sortare(A,st,j);
    if (i < dr)
        sortare(A,i,dr);
}

int main()
{
    srand(time(NULL));
    citire();
    sortare(v, 1, n);
    for (int i = 1;i < n ;++i)
        out << v[i] << " ";
    out << v[n] << "\n";
    return 0;
}