Cod sursa(job #659844)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 11 ianuarie 2012 01:24:49
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <list>
using namespace std;

int maxim,n,v[500002];
list<int> bucket[1000], bucket2[1000], final;

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

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;
}