Cod sursa(job #1837791)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 30 decembrie 2016 14:26:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

const int NMAX = 500005;
const int SQRT = 1 << 16;

int n, c;
int fi[2 * SQRT + 1];
int v[NMAX];
int nxt[NMAX];

void bucketSort() {
    memset(fi, -1, sizeof fi);
    for (int i = 1; i <= n; i++) {
        f >> v[i];
        int j = v[i] % SQRT;
        nxt[i] = fi[j];
        fi[j] = i;
    }
    for (int i = SQRT - 1; i >= 0; i--) {
        int j = fi[i];
        while (j != -1) {
            int _nxt = nxt[j];
            int k = v[j] / SQRT + SQRT;
            nxt[j] = fi[k];
            fi[k] = j;
            j = _nxt;
        }
    }
    for (int i = SQRT; i <= 2 * SQRT; i++) {
        for (int j = fi[i]; j != -1; j = nxt[j]) {
            g << v[j] << " ";
        }
    }
}

int main() {
    f >> n;
    bucketSort();
    return 0;
}