Pagini recente » Cod sursa (job #2155226) | Cod sursa (job #2901246) | Cod sursa (job #2018254) | Cod sursa (job #1716808) | Cod sursa (job #2295879)
#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;
}