Pagini recente » Cod sursa (job #286704) | Cod sursa (job #2295241) | Cod sursa (job #1420354) | Cod sursa (job #2982207) | Cod sursa (job #2295885)
#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;
}