Cod sursa(job #660187)

Utilizator AnaTudorTudor Ana Maria Mihaela AnaTudor Data 11 ianuarie 2012 21:24:04
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <vector>
#include <math.h>
# define MAX 500001
using namespace std;

int x[MAX],n;
vector < vector  <int> >buckets;

void radixSort(int x[],int n,int p)
{
    int val,m=0;
      for(int i=0;i<p;i++)
      {
          for(int j=0;j<n;j++)
            { val=(int)((x[j])/pow(10,i))%10;
              buckets[val].push_back((x[j]));
            }
        for(int k=0;k<10;k++)
         {
            for(int l=0;l<buckets[k].size();l++)
                {  x[m]=buckets[k][l];
                   m++;
                }
          buckets[k].clear();
         }
        m=0;
    }
  buckets.clear();
}

int main()
{
   freopen("algsort.in","r",stdin);
   freopen("algsort.out","w",stdout);
   scanf("%d",&n);
   buckets.resize(10);
   int max=-1;
   for(int i=0;i<n;++i)
      { scanf("%d",&x[i]);
        if (x[i]>max)
            max=x[i];
      }
  int p=0;
  while(max>0)
  {
      p++;
      max=max/10;
  }
   radixSort(x,n,p);
   for(int i=0;i<n;++i)
    {
         printf("%d ",x[i]);
    }


    return 0;
}