Pagini recente » Cod sursa (job #1454108) | Cod sursa (job #1647821) | Cod sursa (job #762587) | Cod sursa (job #681418) | Cod sursa (job #742920)
Cod sursa(job #742920)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
const int N = 500005, Size = 1 << 16;
int v[N], n;
vector<int> upper[Size], lower[Size];
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;
}