Cod sursa(job #3144691)

Utilizator patrick_burasanPatrick Burasan patrick_burasan Data 10 august 2023 00:35:35
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int N, v[500005];

inline void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

inline int partition(int *A, int st, int dr) {
    int lo = st - 1;
    int hi = dr - 1;
    for (int i = st; i <= hi; i++)
        if (A[i] <= A[dr]) {
            lo++;
            swap(&A[i], &A[lo]);
        }
    swap(&A[lo + 1], &A[dr]);
    return lo + 1;
}

inline int randomPartition(int *A, int st, int dr) {
    srand(time(NULL));
    int random = st + rand() % (dr - st);
    swap(&A[random], &A[dr]);
    return partition(A, st, dr);
}

inline void quickSort(int *A, int st, int dr) {
    if (st < dr) {
        int piv = randomPartition(A, st, dr);
        quickSort(A, st, piv - 1);
        quickSort(A, piv + 1, dr);
    }
}

int main() {
    fin >> N;
    for (int i = 0; i < N; i++)
        fin >> v[i];
    quickSort(v, 0, N - 1);
    for (int i = 0; i < N; i++)
        fout << v[i] << ' ';
    fout << '\n';
    fin.close();
    fout.close();
    return 0;
}