Cod sursa(job #1021177)

Utilizator PetreFlorinaFMI Petre Florina PetreFlorina Data 3 noiembrie 2013 14:00:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#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;
}