Cod sursa(job #2204193)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 14 mai 2018 22:45:38
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <vector>

#include <cstdio>
using namespace std;

int partition(vector<int> *v, int left, int right)
{
    int pivotPos = left + (1LL * (*v)[left] * 10007 + 1LL * (*v)[right] * 12244777) % (right - left + 1);
    swap((*v)[pivotPos], (*v)[right]);

    int pivot = (*v)[right];
    int i = left - 1;
    
    for (int j = left; j < right; ++j) {
        if ((*v)[j] < pivot) {
            ++i;
            swap((*v)[i], (*v)[j]);
        }
    }

    ++i;
    swap((*v)[i], (*v)[right]);

    return i;
}

void quickSort(vector<int> *v, int left, int right)
{
    if (left >= right) {
        return;
    }

    int pivotPos = partition(v, left, right);

    quickSort(v, left, pivotPos - 1);
    quickSort(v, pivotPos + 1, right);
}

int main()
{
    freopen("algsort.in", "r", stdin);
    int n;
    scanf("%d", &n);
    vector<int> v(n);
    for (int i = 0; i < v.size(); ++i) {
        scanf("%d", &v[i]);
    }
    fclose(stdin);

    quickSort(&v, 0, n - 1);

    freopen("algsort.out", "w", stdout);
    for (int i = 0; i < v.size(); ++i) {
        printf("%d ", v[i]);
    }
    printf("\n");
    fclose(stdout);

    return 0;
}