Cod sursa(job #1545693)

Utilizator Ionut228Ionut Calofir Ionut228 Data 6 decembrie 2015 22:44:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

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

int N;
int V[500005];

void quickSort(int l, int r)
{
    int i = l, j = r;
    int pR = l + rand() % (r - l);
    int pivot = V[pR];

    if (j - i + 1 <= 11)
    {
        for (int ii = i; ii <= j; ++ii)
        {
            int nr = V[ii];
            int jj = ii;
            while (jj - 1 >= 1 && V[jj - 1] > nr)
            {
                V[jj] = V[jj - 1];
                --jj;
            }
            V[jj] = nr;
        }
        i = r;
        j = l;
    }
    else
    {
        while (i <= j)
        {
            while (V[i] < pivot)
                ++i;
            while (V[j] > pivot)
                --j;

            if (i <= j)
            {
                int aux = V[i];
                V[i] = V[j];
                V[j] = aux;
                ++i;
                --j;
            }
        }
    }

    if (l < j)
        quickSort(l, j);
    if (i < r)
        quickSort(i, r);
}

int main()
{
    srand (time(NULL));

    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> V[i];

    quickSort(1, N);

    for (int i = 1; i <= N; ++i)
        fout << V[i] << ' ';
    fout << '\n';

    fin.close();
    fout.close();
    return 0;
}