Cod sursa(job #659855)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 11 ianuarie 2012 02:19:14
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <list>
using namespace std;

int maxim,n,v[500002];
list<int> bucket[100];

void radix(){
  int sortat=1;
  int digit=1,m=1,m1=1;
  while (digit<=1000000000){
    for (int i=m;i<=n;i++){
      if (v[i]/digit){ 
        sortat=0;
        bucket[(v[i]/digit)%100].push_back(v[i]);
      }
      else v[m++]=v[i];
    }
    if (sortat) return;
    int indice=0;
    for (int i=m;i<=n;i++){
      while (bucket[indice].empty()){ 
        indice++;
      }
      v[i]=bucket[indice].front();
      bucket[indice].pop_front();
    }
    digit*=100;
  }
}

int main()
{
  freopen("algsort.in","r",stdin);
  freopen("algsort.out","w",stdout);
  maxim=-1;
  scanf("%d",&n);
  for (int i=1;i<=n;i++){
    scanf("%d",&v[i]);
    if (v[i]>maxim) maxim=v[i];
  }
  radix();
  for (int i=1;i<=n;i++)
    printf("%d ",v[i]);
  return 0;
}