Cod sursa(job #2275811)

Utilizator alexnigaNiga Alexandru alexniga Data 3 noiembrie 2018 17:20:36
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
using namespace std;
///QUICKSORT
ifstream f("algsort.in");
ofstream g("algsort.out");

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

void citire(int &n, int x[500001])
{
    int i;
    f >> n;
    for (i = 1; i <= n; i++)
    {
        f >> x[i];
    }
}

void afisare(int n, int x[500001])
{
    for(int i = 1; i <= n; i++)
        g << x[i] << " ";
}

int quick(int st, int dr, int x[500001])
{
    int i, j = st-1, piv = (st + dr) / 2, mij = x[piv];
    for(i = st; i <= dr; i++)
    {
        if(x[i] < mij)
        {
            j++;
            if(j == piv)
                piv = i;
            schimba(x[i], x[j]);
        }
    }
    schimba(x[j + 1], x[piv]);
    return j+1;
}

void QuickSort(int st, int dr, int x[500001])
{
    if(st < dr)
    {
        int piv = quick(st, dr, x);
        QuickSort(st, piv - 1, x);
        QuickSort(piv + 1, dr, x);
    }

}

int main()
{
    int n, x[500001];

    citire(n, x);
    QuickSort(1, n, x);
    afisare(n, x);
    return 0;
}