Cod sursa(job #3124534)

Utilizator mariusn01Marius Nicoli mariusn01 Data 29 aprilie 2023 11:52:16
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
/**
Sortare prin vector de frecventa (prin numarare)
Numaram fiecare valoare de cate ori apare (in alt vector la un indice egal cu valoarea de numarat)
Apoi parcurgand crescator indicii din al doilea vector, afisam indicele de cate ori indica valoarea.

Obtinem atatia pasi cate valori sunt (este un algoritm foarte rapid, insa doar daca valorile sunt mici
pentri ca avem nevoie de cate o compopnenta in al doilea vector, pentru fiecare valoare posibila).
O alta limitare este memoria (nu as putea aloca pentru al doilea vector atatea componente).

timp de calcul de ordin n + valoarea maxim.
memorie de ordin (valoarea maxima), asta fiind limitarea principala.

Este cel mai bun algoritm, cand valorile nu sunt foarte mari.

**/
#include <fstream>

using namespace std;
int f[5000000];
int n, i, j, x, maxim;
int main () {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");

    fin>>n;
    for (i=1;i<=n;i++) {
        fin>>x;
        f[x]++;
        if (x > maxim)
            maxim = x;
    }

    for (i=0;i<=maxim;i++) {
        /// afisez pe i de f[i] ori
        for (j=1;j<=f[i];j++)
            fout<<i<<" ";
    }

    return 0;
}