Pagini recente » Cod sursa (job #600326) | Cod sursa (job #2456903) | Cod sursa (job #1399270) | Cod sursa (job #778479) | Cod sursa (job #1015134)
#include <iostream>
#include <fstream>
#include <vector>
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
struct nod
{
int val;
std::vector<int>cifre;
};
void citire(int &n, nod vec[])
{
fin>>n;
for(int i = 0; i < n; i++)
{
fin>>vec[i].val;
int x = vec[i].val;
while(x)
{
vec[i].cifre.push_back(x%10);
x = x / 10;
}
}
}
void RSort(int n, nod vec[])
{
std::vector<nod>liste[10];
int k = 0;
bool done = true;
while(k <= 10 && done)
{
done = false;
for(int i = 0; i < n; i++)
{
if(vec[i].cifre.size() > k)
{
done = true;
liste[vec[i].cifre[k]].push_back(vec[i]);
}
else
{
liste[0].push_back(vec[i]);
}
}
int u = 0;
for(int i = 0; i < 10; i++)
{
for(int p = 0; p < liste[i].size(); p++)
{
vec[u] = liste[i][p];
u++;
}
liste[i].clear();
}
k++;
}
for(int i = 0; i < n; i++)
{
fout<<vec[i].val<<' ';
}
fout<<'\n';
}
int main()
{
int n;
nod vec[500001];
citire(n, vec);
RSort(n, vec);
return 0;
}