Cod sursa(job #2947807)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 26 noiembrie 2022 18:47:36
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>

const uint32_t MAX_N = 500000;

void Sort(uint32_t n, uint32_t* v) {
    if(n < 2)
        return;

    uint32_t pivot = v[rand() % n];
    
    uint32_t begin = 0, end = n - 1;

    while(v[begin] < pivot)
        ++begin;
    while(v[end] > pivot)
        --end;

    while(begin < end) {
        uint32_t aux = v[begin];
        v[begin] = v[end];
        v[end] = aux;

        do
            ++begin;
        while(v[begin] < pivot);
        do
            --end;
        while(v[end] > pivot);
    }
    
    Sort(end + 1, v);
    Sort(n - end - 1, v + end + 1);
}

int main() {
    FILE* fin = fopen("algsort.in", "r");
    FILE* fout = fopen("algsort.out", "w");
    
    uint32_t n, v[MAX_N];
    fscanf(fin, "%u", &n);

    for(uint32_t i = 0; i < n; ++i)
        fscanf(fin, "%u", v + i);
    
    Sort(n, v);

    for(uint32_t i = 0; i < n; ++i)
        fprintf(fout, "%u ", v[i]);

    fclose(fin);
    fclose(fout);

    return 0;
}