Cod sursa(job #2785655)

Utilizator qubitrubbitQubit Rubbit qubitrubbit Data 19 octombrie 2021 10:16:52
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <vector>
using namespace std;

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

int n, arr[500000];

void quickSort(int a[], int left, int right)
{
    if (left >= right)
    {
        return;
    }
    int p = a[(left + right) / 2];
    int cntEqual = 0;
    int cntLess = 0;
    int cntGreater = 0;
    int less[right - left + 1];
    int greater[right - left + 1];
    for (int i = left; i <= right; ++i)
    {
        if (a[i] < p)
        {
            less[cntLess++] = a[i];
        }
        else if (a[i] > p)
        {
            greater[cntGreater++] = a[i];
        }
        else
        {
            ++cntEqual;
        }
    }
    for (int i = left; i <= right; ++i)
    {
        if (i - left < cntLess)
        {
            a[i] = less[i - left];
        }
        else if (i > right - cntGreater)
        {
            a[i] = greater[right - i];
        }
        else
        {
            a[i] = p;
        }
    }
    quickSort(a, left, left + cntLess - 1);
    quickSort(a, right - cntGreater + 1, right);
}

int main()
{
    fin >> n;
    for (int i = 0; i < n; ++i)
    {
        fin >> arr[i];
    }
    quickSort(arr, 0, n - 1);
    for (int i = 0; i < n; ++i)
    {
        fout << arr[i] << " ";
    }
    fout.flush();
    return 0;
}