Pagini recente » Istoria paginii runda/incalzire_oni_2016 | Cod sursa (job #1211265) | Cod sursa (job #2225209) | Cod sursa (job #232052) | Cod sursa (job #1060152)
#include <fstream>
#include <vector>
#include <math.h>
const size_t inf = -1;
std::ifstream in("algsort.in");
std::ofstream out("algsort.out");
template<typename T> void sortBatog(std::vector<T>& a) {
std::vector<size_t> batog;
size_t i, pos, s = sqrt(a.size());
batog.reserve(s + 1);
for (i = 0; i < a.size(); ++i)
if (i / s < batog.size()) {
if (a[batog[i / s]] > a[i])
batog[i / s] = i;
}
else
batog.push_back(i);
while(true) {
pos = 0;
for (i = 1; i < batog.size(); ++i)
if (a[batog[pos]] > a[batog[i]])
pos = i;
if (a[batog[pos]] == inf)
break;
out<<a[batog[pos]]<<" ";
a[batog[pos]] = inf;
for (i = pos * s; i < pos * s + s && i < a.size(); ++i)
if (a[batog[pos]] > a[i])
batog[pos] = i;
}
}
int main() {
std::vector<size_t> v;
size_t n, x;
in>>n;
v.reserve(n);
while(in>>x)
v.push_back(x);
sortBatog(v);
return 0;
}