Pagini recente » Cod sursa (job #162271) | Cod sursa (job #736771) | Cod sursa (job #1673296) | Cod sursa (job #2935261) | Cod sursa (job #390307)
Cod sursa(job #390307)
#include <fstream>
using namespace std;
int ma, *vec[2][65536], A[524288];
int main()
{
int cifra, N, i, j;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin >> N;
for (i = 0; i < N; ++i)
fin >> A[i];
// fac vector0
for (i = 0; i < 65536; ++i)
{
// aloc
vec[0][i] = (int *)malloc(sizeof(int));
// initializez
vec[0][i][0] = 0;
}
// pun in lista dupa ultima "cifra"
for (i = 0; i < N; ++i)
{
// aflu cifra
cifra = A[i] & 65535;
// adun la cifra
++vec[0][cifra][0];
// realoc
vec[0][cifra] = (int *)realloc(vec[0][cifra], sizeof(int) * (vec[0][cifra][0] + 1));
// calculez vectorul
vec[0][cifra][vec[0][cifra][0]] = i;
}
// initializez vectorul in care voi pune numerele
for (i = 0; i < 65536; ++i)
{
// realoc
vec[1][i] = (int *)realloc(vec[1][i], sizeof(int));
// pun
vec[1][i][0] = 0;
}
// pentru fiecare cifra
for (i = 0; i < 65536; ++i)
{
// pentru fiecare element din lista
for (j = 1; j <= vec[0][i][0]; ++j)
{
// aflu cifra
cifra = A[vec[0][i][j]] >> 16;
// pun
++vec[1][cifra][0];
// realoc
vec[1][cifra] = (int *)realloc(vec[1][cifra], (vec[1][cifra][0] + 1) * sizeof(int));
// calculez vectorul
vec[1][cifra][vec[1][cifra][0]] = vec[0][i][j];
}
}
// pentru fiecare cifra
for (i = 0; i < 65536; ++i)
{
// pentru fiecare element din lista
for (j = 1; j <= vec[1][i][0]; ++j)
{
// scriu numarul
fout << A[vec[1][i][j]] << ' ';
}
}
for (i = 0; i < 65536; ++i)
{
free(vec[0][i]);
free(vec[1][i]);
}
fin.close();
fout.close();
return 0;
}