Pagini recente » Cod sursa (job #1515505) | Cod sursa (job #1812371) | Cod sursa (job #1379214) | Cod sursa (job #1516926) | Cod sursa (job #1786269)
#include <fstream>
#include <queue>
#include <cstdlib>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
queue<unsigned int> q[10];
long long int putere_10(int n)
{
if (n == 0)
return 1;
if (n % 2 == 0)
return putere_10(n / 2) * putere_10(n / 2);
else
return putere_10(n - 1) * 10;
}
int main()
{
int n, maxim = 0;
f >> n;
unsigned int* v = (unsigned int*)calloc(n + 1, sizeof(unsigned int));
for (int i = 0; i < n; ++i)
{
f >> v[i];
unsigned int aux = v[i];
int nr = 0;
while (aux)
{
++nr;
aux /= 10;
}
if (nr > maxim)
maxim = nr;
}
/*for (int i = 0; i < n; ++i)
g << v[i] << " ";
g << endl;*/
for (int i = 1; i <= maxim; ++i)
{
long long int k = putere_10(i);
for (int j = 0; j < n; ++j)
q[(v[j] % k) * 10 / k].push(v[j]);
int k1 = 0;
for (int j = 0; j < 10; ++j)
{
while (!q[j].empty())
{
v[k1++] = q[j].front();
q[j].pop();
}
}
}
for (int i = 0; i < n; ++i)
g << v[i] << " ";
return 0;
}