Pagini recente » Cod sursa (job #635489) | Cod sursa (job #2512309) | Cod sursa (job #915148) | Cod sursa (job #733093) | Cod sursa (job #1014360)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");
long a[500001],n;
long maxim (long a[], long n)
{
long maxim=a[0],i;
for (i=1; i<n; i++)
if (a[i]>maxim)
maxim=a[i];
return maxim;
}
void countsort (long a[], long n, int c)
{
long b[500001];
long i; int num[10];
for (i=0; i<n;i++)
num[(a[i]/c)%10]++;
for (i=1;i<10;i++)
num[i]+=num[i-1];
for (i=n-1; i>=0; i--)
{
b[num[(a[i]/c)%10]-1]=a[i];
num[(a[i]/c)%10]--;
}
for (i=0;i<n;i++)
a[i]=b[i];
}
void radixsort (long a[],long n)
{
long m=maxim(a,n);
for (int c=1;m/c>0;c*=10)
countsort(a, n,c);
}
void afisare (long a[], long n)
{
long i;
for (i=0;i<n;i++)
g<<a[i]<<" ";
}
int main()
{
f>>n;
long i;
for (i=0;i<n;i++)
f>>a[i];
radixsort(a,n);
afisare(a,n);
return 0;
}