Pagini recente » Cod sursa (job #2190903) | Cod sursa (job #2328685) | Cod sursa (job #112008) | Cod sursa (job #2824029) | Cod sursa (job #1499738)
#include <bits/stdc++.h>
using namespace std;
struct numar{
numar *next;
int inf;
int cate = 0;
};
numar *start;
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int x[500005];
f >> n;
f >> x[1];
numar *p = new numar;
p->next = start;
p->inf = x[1];
p->cate = 1;
start = p;
for(int i = 2; i <= n; i ++) {
f >> x[i];
bool ok = false;
for(numar *p = start; !ok && p; p = p->next) {
if(p->inf == x[i])
p->cate ++, ok = true;
}
if(!ok) {
if(x[i] < start->inf) {
numar *p = new numar;
p->next = start;
p->inf = x[i];
p->cate = 1;
start = p;
}
else {
numar *p = start;
for(; !ok && p->next; p = p->next) {
if(p->next->inf > x[i]) {
numar *nou = new numar;
nou->inf = x[i];
nou->next = p->next;
p->next = nou;
nou->cate = 1;
ok = true;
}
}
if(ok == false) {
numar *nou = new numar;
nou->inf = x[i];
nou->next = p->next;
p->next = nou;
nou->cate = 1;
p = NULL;
}
}
}
}
int in = 0;
for(numar *p = start; p; p = p->next) {
in += p->cate;
p->cate = in;
}
int ret[500005];
for(int i = 1; i <= n; i ++) {
bool ok = false;
for(numar *p = start; p && !ok; p = p->next) {
if(p->inf == x[i]) {
ret[p->cate] = x[i];
p->cate --;
ok = true;
}
}
}
for(int i = 1; i <= n; i ++) {
g << ret[i] << " ";
}
g << "\n";
return 0;
}