Cod sursa(job #1795251)

Utilizator iulian_f2kGuraliuc Iulian iulian_f2k Data 2 noiembrie 2016 09:41:22
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;

int N;
vector<int> V;

void Read();
void Write();
void RandomQuickSort(int left, int right);
void Swap(int &a, int &b);

int main()
{
    Read();
    RandomQuickSort(0, N - 1);
    Write();
    return 0;
}

void RandomQuickSort(int left, int right) {
    if(left >= right)
        return;
    int i = rand() % (right - left + 1) + left;
    Swap(V[i], V[right]);
    int x = V[right];
    i = left - 1;
    for(int j = left; j < right; j++)
        if(V[j] <= x) {
            i++;
            Swap(V[i], V[j]);
        }
    Swap(V[i + 1], V[right]);
    int piv = i + 1;
    RandomQuickSort(left, piv - 1);
    RandomQuickSort(piv + 1, right);
}

void Swap(int &a, int &b) {
    int c;
    c = a;
    a = b;
    b = c;
}
void Read() {
    freopen("algsort.in", "rt", stdin);
    freopen("algsort.out", "wt", stdout);
    scanf("%d", &N);
    V.assign(N+2, 0);
    for(int i = 0; i < N; i++)
        scanf("%d", &V[i]);
    srand(time(NULL));
}
void Write() {
    for(int i = 0; i < N; i++)
        cout << V[i] << ' ';
    cout << '\n';
}