Pagini recente » Borderou de evaluare (job #643670) | Cod sursa (job #468212) | Cod sursa (job #2143801) | Cod sursa (job #2522243) | Cod sursa (job #2511865)
#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;
}