Cod sursa(job #1071187)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 2 ianuarie 2014 18:16:59
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<queue>
#define maxn 500005
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");

queue <int> q[10];
int i,n,maxv,v[maxn];
int p=1;

void radixsort(int p){
     int i,j=0;
     
     for(i=1;i<=n;i++) q[(v[i]/p)%10].push(v[i]);
     
     for(i=0;i<=9;i++)
        while(q[i].size()){
                           v[++j]=q[i].front();
                           q[i].pop();
                          }
}

int main(){
    //Radix-Sort, (LSD) Least Significant Digit
    fi>>n; fi>>v[1]; maxv=v[1];
    
    for(i=2;i<=n;i++){
                      fi>>v[i];
                      if(v[i]>maxv) maxv=v[i];
                     }
                     
    while(maxv){
                radixsort(p);
                p*=10;
                maxv/=10; 
               } 
    
    for(i=1;i<=n;i++) fo<<v[i]<<" ";
    
    fi.close();
    fo.close();
    return 0;
}