Cod sursa(job #2204199)

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

#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;

vector<int> v;
int partition(int left, int right)
{
    int pivotPos = left + rand() % (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(int left, int right)
{
    if (left >= right) {
        return;
    }

    int pivotPos = partition(left, right);

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

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

    srand(time(NULL));
    quickSort(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;
}