Pagini recente » Cod sursa (job #607670) | Cod sursa (job #741182) | Cod sursa (job #1531020) | Cod sursa (job #2489268) | Cod sursa (job #2057792)
/// 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;
}