Cod sursa(job #2280596)

Utilizator al3xionescuIonescu Alexandru al3xionescu Data 10 noiembrie 2018 21:21:00
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <vector>
 
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
 
const int MAX_N = 5 * 1e5;
 
int v[MAX_N];
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);
    for (int i = 0; i < n; ++i) {
        scanf("%d", &v[i]);
    }
    fclose(stdin);
 
    srand(time(NULL));
    quickSort(0, n - 1);
 
    freopen("algsort.out", "w", stdout);
    for (int i = 0; i < n; ++i) {
        printf("%d ", v[i]);
    }
    printf("\n");
    fclose(stdout);
 
    return 0;
}