Pagini recente » Cod sursa (job #36662) | Cod sursa (job #1198653) | Cod sursa (job #2856452) | Cod sursa (job #2534685) | Cod sursa (job #1021177)
#include<iostream>
#include<fstream>
using namespace std;
long v[500001];
int n;
int NumarCifre()
{
long Maximul = v[1];
int i,nr;
nr = 0;
for ( i=2; i<=n; i++ )
if ( v[i] > Maximul ) Maximul = v[i];
while ( Maximul != 0 )
{
nr++;
Maximul = Maximul / 10 ;
}
return nr;
}
void RadixSort(int d)
{
int i, c, nr;
int s[10];
long a[500001];
for (i=0;i<=9;i++)
s[i]=0;
for ( i=1; i<=n; i++)
{
c = (v[i] / d) % 10;
s[c]++;
}
// cout << "\n";
//for (i=0;i<=9;i++)
//cout<<s[i]<<" ";
nr = s[0];
for ( i=1; i<=9; i++)
if (s[i] != 0)
{
nr = nr + s[i];
s[i]= nr;
}
// cout <<"\n";
// for (i=0;i<=9;i++)
//cout << s[i] <<" ";
//cout <<"\n";
for ( i=n; i>=1; i-- )
{
c = (v[i]/d) % 10;
a[s[c]] = v[i];
s[c]--;
}
for ( i=1; i<=n; i++ )
v[i] = a[i];
//for (i=1;i<=n;i++)
//cout << v[i] <<" ";
//cout <<"\n";
}
int main()
{
int k,i,d = 1;
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> n;
for ( i=1; i<=n; i++ )
f >> v[i];
k = NumarCifre();
for ( i=1; i<=k; i++)
{
RadixSort(d);
d = d * 10;
}
for ( i=1; i<=n; i++ )
g << v[i] <<" ";
return 0;
}