Cod sursa(job #1410395)

Utilizator OrolesVultur Oroles Data 31 martie 2015 00:55:54
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <iostream>
#include <list>
#include <vector>
#include <iterator>

int N,A,B,C;
unsigned int v[10000000];

int main( int argc, char* argv[] )
{
    std::ifstream input("radixsort.in");
    std::ofstream output("radixsort.out");
    input >> N >> A >> B >> C;
    v[0] = B;
    int max = B;
	int aux1 = B;
	int aux2;
	int contor = 1;
	std::cout << v[0] << " ";
    for ( int i = 1; i <= N; ++i )
    {
		aux2 = ( A * aux1 + B ) % C;
		std::cout << aux2 << " ";
		if ( i % 10 == 0 )
		{
			v[contor++] = aux2;
		}
		aux1 = aux2;
		max = ( aux1 > max ) ? aux1 : max;
    }
	std::cout << std::endl;
	for ( int i = 0; i < contor; ++i )
	{
		std::cout << v[i] << " ";
	}
	std::cout << std::endl;

    static const int BASE = 10;
    std::list<int> bucket[BASE];
    
    for ( int n = 1; max >= n; n *= BASE )
    {
        int k = 0;
        for ( int i = 0; i < contor; i++ )
        {
            bucket[(v[i]/n)%BASE].push_back(v[i]);
        }
        for ( int i=0; i < BASE; bucket[i++].clear() )
        {
            for ( std::list<int>::iterator j = bucket[i].begin(); j!= bucket[i].end(); ++j )
            {
                v[k++] = (*j);
            }
        }
    }

    for ( int i = 0; i < contor; ++i )
    {
        std::cout << v[i] << " ";
    }
    std::cout << std::endl;

    input.close();
    output.close();
    return 0;
}