Cod sursa(job #649380)

Utilizator andreioneaAndrei Onea andreionea Data 15 decembrie 2011 22:07:21
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
//Radix sort
#include <fstream>
#include <vector>
#include <queue>

#define INFILE "algsort.in"
#define OUTFILE "algsort.out"


using namespace std;

void radixsort(vector<int> &v)
{
	unsigned char mask = 255;
	queue<int> buckets[256];
	int nbytes = sizeof(int);
	for(int i = 0; i<nbytes; ++i)
	{
		for(vector<int>::iterator it = v.begin(); it != v.end(); ++it) 
			buckets[(*it)>>(i<<3)&mask].push(*it);
		
		v.clear();
		
		for(int j = 0; j<256; ++j) {
			while (!buckets[j].empty()) {
				v.push_back(buckets[j].front());
				buckets[j].pop();
			}	
		}
	}
}

int main()
{
	vector<int> v;
	int n;
	
	ifstream fin(INFILE);
	ofstream fout(OUTFILE);
	fin >> n;
	v.reserve(n);
	for(int i = 0; i<n; ++i){
		int k;
		fin >> k;
		v.push_back(k);
	}
	
	radixsort(v);
	for(vector<int>::iterator it = v.begin(); it != v.end(); ++it)
		fout << *it << " ";

	fin.close();
	fout.close();
	
	return 0;
}