Cod sursa(job #3318852)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 29 octombrie 2025 13:51:59
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <stdint.h>
#include <time.h>
#include <math.h>
#include <utility>

const int32_t MAX_N = 500000;

int32_t vec[MAX_N];

void QuickSort(int32_t left, int32_t right) {
    if(left >= right)
        return;

    int32_t len = right - left + 1;
    int32_t randVal = rand() * (RAND_MAX + 1) + rand();
    int32_t pivot = vec[randVal % len + left];

    int32_t start = left, end = right;
    while(vec[start] < pivot)
        ++start;
    while(vec[end] > pivot)
        --end;

    while(start < end) {
        std::swap(vec[start], vec[end]);
        ++start;
        --end;
        
        while(vec[start] < pivot)
            ++start;
        while(vec[end] > pivot)
            --end;
    }

    QuickSort(left, end);
    QuickSort(end + 1, right);
}

int main() {
    std::ifstream fin("algsort.in");
    std::ofstream fout("algsort.out");

    srand(time(nullptr));

    int32_t n;
    fin >> n;
    for(int32_t i = 0; i != n; ++i)
        fin >> vec[i];
    
    QuickSort(0, n - 1);

    for(int32_t i = 0; i != n; ++i)
        fout << vec[i] << ' ';

    fin.close();
    fout.close();

    return 0;
}