Pagini recente » Cod sursa (job #2124993) | Cod sursa (job #692488) | Cod sursa (job #32135) | Cod sursa (job #734596) | Cod sursa (job #1837766)
#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 c;
int fi[2 * SQRT + 1];
List l[2 * SQRT + 1];
inline void listPrepend(int i, int v) {
c++;
l[c] = List(v, fi[i]);
fi[i] = c;
}
int n;
int a[NMAX];
int b[NMAX];
void bucketSort() {
memset(fi, -1, sizeof fi);
for (int i = 1; i <= n; i++) {
int j = (a[i] % SQRT);
listPrepend(j, a[i]);
}
for (int i = 0; i < SQRT; i++) {
for (int j = fi[i]; j != -1; j = l[j].nxt) {
int k = (l[j].v / SQRT) + SQRT;
listPrepend(k, l[j].v);
}
}
int p = n;
for (int i = 2 * SQRT; i >= SQRT; i--) {
for (int j = fi[i]; j != -1; j = l[j].nxt) {
b[p] = l[j].v;
p--;
}
}
}
int main() {
f >> n;
for (int i = 1; i <= n; i++) {
f >> a[i];
}
bucketSort();
for (int i = 1; i <= n; i++) {
g << b[i] << " ";
}
return 0;
}