Cod sursa(job #443382)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 16 aprilie 2010 20:48:55
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 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, 10 );

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

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

    return 0;
}