Cod sursa(job #2057792)

Utilizator Andreiii500Andrei Puiu Andreiii500 Data 4 noiembrie 2017 19:21:34
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
/// RadixSort
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;

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

const int N = 500000;
int v[N];
int n;

int main()
{
    list<int> digits[10];
    long long mod, div, digitIndex; /// (x%mod)/div = x's digit of index "lg10(mod)"

    in>>n;
    for(int i=0; i<n; ++i)
        in>>v[i];

    for(mod = 10, div = 1, digitIndex = 1; digitIndex <= 10; mod*=10, div*=10, ++digitIndex)
    {

        for(int i=0; i<n; ++i)
        {
            int digit = (v[i]%mod)/div;
            //cout<<v[i]<<" --> "<<digit<<"\n";
            digits[digit].push_back(v[i]);
        }

        int index=0;
        for(int i=0; i<=9; ++i)
            for(list<int>::iterator it = digits[i].begin(); it != digits[i].end(); ++it)
            {
                v[index++] = *it;
                //cout<<i<<" "<<*it<<"\n";
            }
        //cout<<"\n";

        for(int i=0; i<=9; ++i)
            digits[i].clear();
    }

    for(int i=0; i<n; ++i)
        out<<v[i]<<" ";

    return 0;
}