Cod sursa(job #2845441)

Utilizator francescom_481francesco martinut francescom_481 Data 7 februarie 2022 20:29:59
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb

#include <bits/stdc++.h>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");
#define cin fin
#define cout fout

#define TOTAL_BUCKETS 2048
#define DIM 500002

int N, nr[2][DIM], a, b, c;
int cnt[TOTAL_BUCKETS];

void reorder(int bucket, int line) {
    memset(cnt, 0, sizeof(cnt));

    for(int i = 0; i < N; i++) {
        cnt[(nr[line][i] >> bucket) % TOTAL_BUCKETS]++;
    }

    for(int i = 1; i < TOTAL_BUCKETS; i++) {
        cnt[i] += cnt[i - 1];
    }

    for(int i = N - 1; i >= 0; --i) {
        nr[1 - line][--cnt[(nr[line][i] >> bucket) % TOTAL_BUCKETS]] = nr[line][i];
    }
}

void radix() {
    for(int bucket = 0; bucket < 3; bucket++) {
        reorder(11 * bucket, bucket % 2);
    }
}

int main() {

    cin >> N;

    for(int i = 0; i < N; i++) {

        cin >> nr[0][i];
    }

    radix();

    for(int i = 0; i < N; i ++) {
        cout << nr[1][i] << ' ';
    }

    cout << '\n';

    return 0;
}