Pagini recente » Cod sursa (job #1194871) | Cod sursa (job #1652852) | Cod sursa (job #1613468) | Cod sursa (job #1238278) | Cod sursa (job #742918)
Cod sursa(job #742918)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
const int N = 500005, Size = 1 << 10;
int v[N], n;
vector<int> upper[N], lower[N];
ifstream in("algsort.in");
ofstream out("algsort.out");
void radix(int v[], int n)
{
int key = Size - 1;
for (int i = 1 ; i <= n ; i++)
lower[v[i] & key].push_back(v[i]);
for (int i = 0 ; i < Size ; i++)
for (vector<int> :: iterator it = lower[i].begin() ; it != lower[i].end() ; it++)
upper[(*it) >> 16].push_back(*it);
n = 0;
for (int i = 0 ; i < Size ; i++)
for (vector<int> :: iterator it = upper[i].begin() ; it != upper[i].end() ; it++)
v[++n] = *it;
}
int main()
{
int n;
in >> n;
for (int i = 1 ; i <= n ; i++)
in >> v[i];
radix(v, n);
for (int i = 1 ; i <= n ; i++)
out << v[i] << " ";
out << "\n";
return 0;
}