Cod sursa(job #2295879)

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

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

int v[500002], w[500002], n, nr[260], index[260];

void frecventa(int x)
{
    int radix = 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) & radix] ++;

    index[0] = 0;

    for (i = 1; i <= 255; i++)
   
        index[i] = index[i - 1] + nr[i - 1];
    for (i = 0; i < n; i++)
    {
        aux = (v[i] >> octet) & radix;
        //in w pastrez sortarea numerelor dupa octetul curent
        w[index[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];
    radixsort();
    for (i = 0; i < n; i++)
        g << v[i] <<" ";
    return 0;
}