Pagini recente » Cod sursa (job #2345279) | Cod sursa (job #3182577) | Cod sursa (job #3268060) | Cod sursa (job #347290) | Cod sursa (job #347395)
Cod sursa(job #347395)
#include <fstream>
#include <list>
#include <vector>
#include <iostream>
using namespace std;
struct nod{
int x;
int small;
int big;
int n;
nod(int X):x(X){
n=1;
small=0;
big=0;
}
};
void desfa_arbore(vector<int>& sorted,vector<nod>& v,int i=0){
if(v[i].small) desfa_arbore(sorted,v,v[i].small);
for(int j=0;j<v[i].n;j++) sorted.push_back(v[i].x);
if(v[i].big) desfa_arbore(sorted,v,v[i].big);
}
int main(){
ifstream in("algsort.in");
ofstream out("algsort.out");
vector<nod> v;
int n;in>>n;v.reserve(n);
int t;in>>t;v.push_back(nod(t));
//citire si formare arbore
for(int i=1;i<n;i++){
int t;in>>t;
int j=0;
bool go=true;
while(go){
if(t<v[j].x){
if(v[j].small){
j=v[j].small;
}else{
v[j].small=v.size();
v.push_back(nod(t));
go=false;
}
}else if(t==v[j].x){
v[j].n++;go=false;
}else{
if(v[j].big){
j=v[j].big;
}else{
v[j].big=v.size();
v.push_back(nod(t));
go=false;
}
}
}
}
//vectorul sortat:
vector<int> sorted;sorted.reserve(n);
desfa_arbore(sorted,v);
for(int i=0;i<n;i++){
out<<sorted[i]<<' ';
}
}