Cod sursa(job #1014360)

Utilizator CatalinaRaduCatalina Elena Radu CatalinaRadu Data 22 octombrie 2013 16:13:56
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#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;
}