Cod sursa(job #1076618)

Utilizator handz.FMI Andrei Tanasescu handz. Data 10 ianuarie 2014 13:56:42
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

#define maxN 500005
#define MIN -1000000005
vector <int> v (maxN);
vector <int> g[10];
unsigned n,m,i,j,k;

void print(int pas)
{
    int x;
    cout<<"\n Vectorul la pasul "<<pas<<": ";
    for(i=0; i<n ;i++)
    {
        x=v.at(i);
        cout<<x<<" ";
    }
}

int main()
{
    int x,ord,maxim,nr,r,d;
    maxim=MIN;
    in>>n;
    for(i=0; i<n ;i++)
    {
        in>>x;
        v.at(i)=x;
        if(maxim<x) maxim=x;
    }

    m=0;
    while(maxim)
    {
        m++;
        maxim=maxim/10;
    }

    ord=1;
    for(k=1; k<=m ;k++)
    {
        ord=ord*10;
        for(i=0; i<n ;i++)
        {
            d=v[i]%ord;
            r=d/(ord/10);
            g[r].push_back(v.at(i));
        }

        /*for(i=0; i<=9 ;i++)
        {
            cout<<"\n Galeata "<<i<<": ";
            if(g[i].size())
            {
                for(j=0; j<g[i].size() ;j++)
                {
                    cout<<g[i][j]<<" ";
                }
            }
            else cout<<" nu contine nimic !";
        }*/

        nr=0;
        for(i=0; i<=9 ;i++)
        {
            if(g[i].size())
            {
                for(j=0; j<g[i].size() ;j++)
                {
                    v.at(nr++)=g[i][j];
                }
                g[i].clear();
            }
        }
    }

    for(i=0; i<n ;i++)
        out<<v.at(i)<<" ";

    return 0;
}