Cod sursa(job #2511865)

Utilizator DavidLDavid Lauran DavidL Data 19 decembrie 2019 21:45:03
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
 
const int NRB = 4;
const int SIZEB = 8;
 
int n, a, b, c;
int v[500005];
int v2[500005];
int cnt[(1 << SIZEB) + 10];
 
void radixSort()
{
    ll p = 0;
    for (int rep = 1; rep <= NRB; rep++, p += SIZEB)
    {
        memset(cnt, 0LL, sizeof(cnt));
 
        for (int i = 1; i <= n; i++)
            cnt[((v[i] >> p) & 255) + 1]++;
 
        for (int i = 1; i < (1 << SIZEB); i++)
            cnt[i] += cnt[i - 1];
 
        for (int i = 1; i <= n; i++)
        {
            int poz = cnt[((v[i] >> p) & 255)] + 1;
            v2[poz] = v[i];
            cnt[((v[i] >> p) & 255)]++;
        }
        for (int i = 1; i <= n; i++)
            v[i] = v2[i];
    }
}
 
int main()
{
    fi >> n;
    for (int i = 1; i <= n; i++)
        fi >> v[i];
 
    radixSort();
 
    for (int i = 1; i <= n; i++)
        fo << v[i] << " ";
 
    return 0;
}