Cod sursa(job #2676229)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 23 noiembrie 2020 19:35:00
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
const int NMAX =  5e5;
const int NO_BUCKETS = (1 << 16);
const int VALUES_PER_BUCKET_BITS = 15;

int v1[NMAX], v2[NMAX];
int freq[NO_BUCKETS], ind[NO_BUCKETS];

static inline int getBucketNumber(int value) {
  return value >> VALUES_PER_BUCKET_BITS;
}

int main() {
    FILE *fin, *fout;
    int n, i;
    fin = fopen("algsort.in", "r");
    fscanf(fin, "%d", &n);
    for ( i = 0; i < n; i++ )
        fscanf(fin, "%d", &v1[i]);
    fclose(fin);

    for ( i = 0; i < n; i++ )
        ++freq[getBucketNumber(v1[i])];

    for ( i = 1; i < NO_BUCKETS; i++ )
        ind[i] = ind[i - 1] + freq[i - 1];

    for ( i = 0; i < n; i++ )
        v2[ind[getBucketNumber(v1[i])]++] = v1[i];

    sort(v2, v2 + freq[0]);
    for (i = 1; i < NO_BUCKETS; ++i) {
        freq[i] += freq[i - 1];
        sort(v2 + freq[i - 1], v2 + freq[i]);
    }

    fout = fopen("algsort.out", "w");
    for (i = 0; i < n; ++i)
        fprintf(fout, "%d ", v2[i]);
    fclose(fout);

    return 0;
}