Pagini recente » Cod sursa (job #141288) | Cod sursa (job #2221759) | Cod sursa (job #2033016) | Cod sursa (job #112801) | Cod sursa (job #3206259)
#pragma GCC optimize("O3")
#pragma GCC optimize("fast-math")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("avx2")
#include<bits/stdc++.h>
using namespace std;
int n, v[500005], copiere[500005], fr[10];
int maximu(int n)
{
int maxi = INT_MIN;
for(int i = 1; i <= n; ++i)
{
maxi = max(v[i], maxi);
}
return maxi;
}
void radix(int n, int exponent)
{
int fr[10] = {0}, copiere[500005] = {0};
for(int i = 1; i <= n; ++i)
{
fr[(v[i] / exponent) % 10]++;
}
for(int i= 1; i <= 9; ++i)
{
fr[i] += fr[i - 1];
}
for(int i = n; i >= 1; --i)
{
copiere[fr[(v[i] / exponent) % 10]] = v[i];
fr[(v[i] / exponent) % 10]--;
}
for(int i= 1; i <= n; ++i)
{
v[i] = copiere[i];
}
}
void sortare(int n)
{
int maxim = maximu(n);
for(int exponent = 1; maxim / exponent > 0; exponent *= 10)
{
radix(n, exponent);
}
}
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int32_t main(int argc, char * argv[])
{
fin >> n;
for(int i = 1; i <= n; ++i)
{
fin >> v[i];
}
sortare(n);
for(int i = 1; i <= n; ++i)
{
fout << v[i] << " ";
}
return 0;
}