Pagini recente » Cod sursa (job #3135802) | Cod sursa (job #2555078) | Cod sursa (job #1141715) | Cod sursa (job #3002415) | Cod sursa (job #1786088)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
#define NMAX 500000
typedef struct {
unsigned content[NMAX+5];
unsigned first;
unsigned last;
void enq(unsigned val) {
if(last == NMAX)
fout<<"Coada plina!";
else
content[++last] = val;
}
unsigned deq() {
if(first > last) {
fout<<"Coada vida!";
return 0; //
}
else {
unsigned val = content[first];
first++;
return val;
}
}
} QUEUE;
unsigned N;
unsigned v[NMAX], i, j, k;
unsigned maxim, nr_ciclii, x;
QUEUE queues[11];
unsigned cifraI(unsigned X, unsigned i) {
while(X > 0 && i > 1) {
X /= 10;
i--;
}
return X%10;
}
int main()
{
fin>>N;
for(i = 1 ; i <= N ; i++)
fin>>v[i];
maxim = v[1];
for(i = 2 ; i <= N ; i++)
if(maxim < v[i])
maxim = v[i];
nr_ciclii = 0;
while(maxim > 0) { nr_ciclii++; maxim /= 10; }
for(i = 1 ; i <= nr_ciclii; i++) {
//initializam cozile
for(j = 0 ; j < 10 ; j++) {
queues[j].first = 1;
queues[j].last = 0;
}
//introducem elementele in cozile aferente
for(j = 1 ; j <= N ; j++) {
queues[ cifraI(v[j], i) ].enq(v[j]);
}
//concatenam cozile
k = 0;
for(j = 0 ; j < 10 ; j++) {
while(queues[j].first <= queues[j].last)
v[++k] = queues[j].deq();
}
}
for(i = 1 ; i <= N ; i++)
fout<<v[i]<<' ';
fin.close();
fout.close();
return 0;
}