Cod sursa(job #828753)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 4 decembrie 2012 12:57:35
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <queue>
 
using namespace std;
 
ifstream in("algsort.in");
ofstream out("algsort.out");
 
const int N=500001;
const int biti=8;
 
int S=1<<biti;
 
queue <int> buckets[1<<8];
 
int v[N],n,maxim;
 
void RadixSort(){
    int i,j,place,aux;
    for(i=0;maxim;maxim>>=biti,i+=biti){
        for(j=1;j<=n;++j){
            place=((v[j]>>i)&255);
            buckets[place].push(v[j]);
        }
        aux=0;
        for(j=0;j<=255;++j){
            while(!buckets[j].empty()){
                v[++aux]=buckets[j].front();
                buckets[j].pop();
            }
        }
    }
}
 
int main(){
    int i;
    in>>n;
    for(i=1;i<=n;++i){
        in>>v[i];
        if(v[i]>maxim)
            maxim=v[i];
    }
    RadixSort();
    for(i=1;i<=n;++i){
        out<<v[i]<<" ";
    }
    return 0;
}