Cod sursa(job #2197739)

Utilizator LivcristiTerebes Liviu Livcristi Data 22 aprilie 2018 20:10:11
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define NUM 500005
int v[NUM];
int n;
void schimb(int &a, int &b)
{
    int aux = a;
    a = b;
    b = aux;
}
int partitie(int v[], int st, int dr)
{
    int pivot = v[dr];
    int i = st - 1;
    for(int j = st; j < dr; ++j)
        if(v[j] <= pivot)
            schimb(v[++i], v[j]);
    schimb(v[i + 1], v[dr]);
    return i + 1;
}
void quicksort(int v[], int st, int dr)
{
    while(st < dr)
    {
        int p = partitie(v, st, dr);
        if(p - dr < dr - p)
        {
            quicksort(v, st, p - 1);
            st = p + 1;
        }
        else
        {
            quicksort(v, p + 1, dr);
            dr = p - 1;
        }
    }
}
using namespace std;
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    f >> n;
    for(int i = 0; i < n; ++i)
        f >> v[i];
    quicksort(v, 0, n - 1);
    for(int i = 0; i < n; ++i)
        g << v[i] << " ";
    f.close();
    g.close();
}