Pagini recente » Cod sursa (job #767168) | Cod sursa (job #1830337) | Cod sursa (job #1037405) | Cod sursa (job #2521357) | Cod sursa (job #3206263)
#include <bits/stdc++.h>
#define dim 1000005
using namespace std;
int v[dim], copiere[dim];
int updatemax(int n)
{
int maxi = INT_MIN;
for(int i = 0; i < n; ++i)
{
maxi = max(v[i], maxi);
}
return maxi;
}
void countu(int n, int exponent)
{
int fr[10] = {0};
for(int i = 0; i < n; ++i)
{
fr[(v[i] / exponent) % 10]++;
}
for(int i = 1; i <= 9; ++i)
{
fr[i] += fr[i - 1];
}
for(int i = n - 1; i >= 0; --i)
{
copiere[fr[(v[i] / exponent) % 10] - 1] = v[i];
fr[(v[i] / exponent) % 10]--;
}
for(int i = 0; i < n; ++i)
{
v[i] = copiere[i];
}
}
void radix(int n)
{
int m = updatemax(n);
for(int exponent = 1; m / exponent > 0; exponent *= 10)
{
countu(n,exponent);
}
}
int n;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int main()
{
fin >> n;
for(int i = 0; i < n; ++i)
{
fin >> v[i];
}
radix(n);
for(int i = 0; i < n; ++i)
{
fout << v[i] << " ";
}
return 0;
}