Pagini recente » Cod sursa (job #1037805) | Cod sursa (job #453052) | Cod sursa (job #1158331) | Cod sursa (job #348876) | Cod sursa (job #1837771)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int NMAX = 500005;
const int SQRT = 1 << 16;
class List {
public:
int v;
int nxt;
List() {}
List(int _v, int _nxt) {
v = _v;
nxt = _nxt;
}
};
int n;
int c;
int fi[2 * SQRT + 1];
List l[2 * NMAX + 1];
inline void listPrepend(int i, int v) {
c++;
l[c] = List(v, fi[i]);
fi[i] = c;
}
void bucketSort() {
memset(fi, -1, sizeof fi);
for (int i = 1, x; i <= n; i++) {
f >> x;
listPrepend(x % SQRT, x);
}
for (int i = SQRT - 1; i >= 0; i--) {
for (int j = fi[i]; j != -1; j = l[j].nxt) {
listPrepend(l[j].v / SQRT + SQRT, l[j].v);
}
}
for (int i = SQRT; i <= 2 * SQRT; i++) {
for (int j = fi[i]; j != -1; j = l[j].nxt) {
g << l[j].v << " ";
}
}
}
int main() {
f >> n;
bucketSort();
return 0;
}