Pagini recente » Cod sursa (job #2723277) | Cod sursa (job #1112594) | Cod sursa (job #2439323) | Cod sursa (job #287648) | Cod sursa (job #742916)
Cod sursa(job #742916)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void radix(vector<int>& v)
{
if (v.size() < 2)
return;
int step, st = v.back(), dr = v.back();
for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
{
st = min(st, *it);
dr = max(dr, *it);
}
if (st == dr)
return;
step = sqrt(dr - st);
vector<int> lista[step + 1];
for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
lista[((*it) - st) / step].push_back(*it);
v.clear();
for (int i = 0 ; i <= step ; i++)
{
radix(lista[i]);
for (vector<int> :: iterator it = lista[i].begin() ; it != lista[i].end() ; it++)
v.push_back(*it);
}
}
int main()
{
int n, x;
vector<int> v;
in >> n;
while (n--)
{
in >> x;
v.push_back(x);
}
radix(v);
for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
out << (*it) << " ";
out << "\n";
return 0;
}