Cod sursa(job #2295885)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 3 decembrie 2018 23:58:17
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
#include<iostream>
using namespace std;

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

int v[500005], w[500005], n, nr[260], indice[260];

void frecventa(int x)
{
    int r = 255;//2^8-1
    //merg din octet in octet
    int octet = x * 8, i, aux;
//setez un vector pe care il initializez pe toate pozitiile cu 0, fiecare nr posibil
    for (i = 0; i <= 255; i++)
        nr[i] = 0;
//pentru fiecare element din v obtin octetul x din fiecare nr din vector si cresc frecventa
    for (i = 0; i < n; i++)
        nr[(v[i] >> octet) & r] ++;

    indice[0] = 0;

    for (i = 1; i <= 255; i++)
   
        indice[i] = indice[i - 1] + nr[i - 1];
    for (i = 0; i < n; i++)
    {
        aux = (v[i] >> octet) & r;
        //in w pastrez sortarea numerelor dupa octetul curent
        w[indice[aux]++] = v[i];
    }
    //si suprascriu in v
    for (i = 0; i < n; i++)
        v[i] = w[i];
}

void radixsort()
{
    int i;
    //un for pana la 4 pentru cei 4 octeti(int stocat pe 32 de biti)
    for (i = 0; i < 4; i++)
        frecventa(i);
}

int main()
{
    int i;
    f >> n;
    for (i = 0; i < n; i++)
        f >> v[i];
    rsort();
    for (i = 0; i < n; i++)
        g << v[i] <<" ";
    return 0;
}