Pagini recente » Cod sursa (job #1486988) | Cod sursa (job #568538) | Cod sursa (job #1943973) | Cod sursa (job #2837101) | Cod sursa (job #2275416)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500005], n;
int numarMaximCifre()
{
int i, maxim = 0, nrMaximCifre = 0;
for (i=1;i<=n;i++)
if (v[i]>maxim)
maxim = v[i];
while(maxim!=0)
{
nrMaximCifre++;
maxim = maxim/10;
}
return nrMaximCifre;
}
int selecteazaCifra(int numar, int pozitie)
{
return numar/pozitie % 10;
}
void radixsort()
{
int nrMaximCifre = numarMaximCifre();
int radix = 10, i, nrCifra;
queue<int> buckets[10];
int pozitie = 1;
for (nrCifra=1; nrCifra<=nrMaximCifre; nrCifra++)
{
for(i=1;i<=n;i++)
buckets[selecteazaCifra(v[i], pozitie)].push(v[i]);
int poz_vector = 0;
for (i=0;i<10;i++)
while(!buckets[i].empty())
{
v[++poz_vector] = buckets[i].front();
buckets[i].pop();
}
pozitie = pozitie * 10;
}
}
int main()
{
int i;
f>>n;
for (i=1;i<=n;i++)
f>>v[i];
radixsort();
for (i=1;i<=n;i++)
g<<v[i]<<" ";
return 0;
}