Cod sursa(job #443380)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 16 aprilie 2010 20:47:46
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <algorithm>
#include <fstream>
#include <vector>

using namespace std;

const char Input[] = "algsort.in";
const char Output[] = "algsort.out";

void RadixSort( vector <int> &a, int base ) {

    int const MAX = 10;
    static vector <int> buckets[MAX];
    int pow = 1;

    for( int i = 0; i < MAX; ++i ) {

        buckets[i].resize( a.size() );
        buckets[i][0] = 0;
    }

    for( int i = 0; i < base; ++i, pow *= 10 ) {

        for( int j = 0; j < MAX; ++j ) {

            buckets[j][0] = 0;
        }

        for( int j = 0; j < (int) a.size(); ++j ) {

            int index = (a[j] / pow) % 10;
            buckets[index][++buckets[index][0]] = a[j];
        }

        int cnt = 0;
        for( int j = 0; j < MAX; ++j ) {

            for( int k = 0; k < buckets[j][0]; ++k ) {

                a[cnt++] = buckets[j][k + 1];
            }
        }
    }
}

int main() {

    ifstream fin( Input );
    ofstream fout( Output );

    int N;

    fin >> N;
    vector <int> v;
    v.resize( N );
    for( int i = 0; i < N; ++i )
        fin >> v[i];

    RadixSort( v, 4 );

    for( int i = 0; i < N; ++i )
        fout << v[i] << " ";

    fin.close();
    fout.close();

    return 0;
}