Pagini recente » Cod sursa (job #361559) | Cod sursa (job #2315166) | oni10_2013 | Istoria paginii runda/gm_2 | Cod sursa (job #1802480)
#include <iostream>
#include <fstream>
#define dim 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int rad[10][dim];
int cif_max(int v[dim], int n)
{
int i, mx, k;
mx = k = 0;
for(i=1 ; i <= n ; i++)
{
if(mx < v[i]){
mx = v[i];
}
}
while(mx){
++k;
mx/=10;
}
return k;
}
void radix_sort(int v[dim], int nr_cif_mx, int n)
{
int i, j, p=1, k=0;
for(i = 1 ; i <= nr_cif_mx ; i++)
for(j = 1 ; j <= n ; j++)
{
int x = v[j]/p%10;
rad[x][0]++;
int y = rad[x][0];
rad[x][y] = v[j];
}
for(i = 0 ; i <= 9 ; i++)
for(j = 1 ; j <= rad[i][0] ; j++)
v[++k] = rad[i][j];
for(i=0 ; i <= 9 ; i++)
rad[i][0]=0;
p*=10;
}
int main()
{
int i, j, n, v[dim];
f>>n;
for(i = 1 ; i <= n ; i++)
{
f>>v[i];
}
int cif = cif_max(v, n);
radix_sort(v, cif, n);
for(i = 1 ;i <= n ;i++)
{
g << v[i] << " ";
}
}