Pagini recente » Cod sursa (job #610224) | Cod sursa (job #2660972) | Cod sursa (job #63372) | Cod sursa (job #645094) | Cod sursa (job #1653299)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
struct link {
int val;
link *left;
link *right;
link() {
val = 0;
left = NULL;
right = NULL;
}
};
link *root = new link();
void sortT(int n) {
int a;
in >> a;
root->val = a;
root->left = NULL;
root->right = NULL;
for(int i = 1; i < n; i++) {
in >> a;
link *t = new link();
while(true) {
if(root->right == NULL && root->left == NULL) {
if(root->val <= a) {
t->val = a;
t->left = root;
t->right = NULL;
root->right = t;
root = t;
break;
}
if(root->val >= a) {
t->val = a;
t->right = root;
t->left = NULL;
root->left = t;
root = t;
break;
}
}
if(root->right == NULL) {
if(root->val <= a) {
t->val = a;
t->left = root;
t->right = NULL;
root->right = t;
root = t;
break;
} else {
if(root->left->val <= a) {
t->val = a;
t->left = root->left;
t->right = root;
root->left->right = t;
root->left = t;
root = t;
break;
}
root = root->left;
continue;
}
}
if(root->left == NULL) {
if(root->val >= a) {
t->val = a;
t->right = root;
t->left = NULL;
root->left = t;
root = t;
break;
} else {
if(root->right->val > a) {
t->val = a;
t->left = root;
t->right = root->right;
root->right->left = t;
root->right = t;
root = t;
break;
}
root = root->right;
continue;
}
}
if(root->right->val >= a && root->val <= a) {
t->val = a;
t->left = root;
t->right = root->right;
root->right->left = t;
root->right = t;
root = t;
break;
}
if(root->left->val <= a && root->val >= a) {
t->val = a;
t->left = root->left;
t->right = root;
root->left->right = t;
root->left = t;
root = t;
break;
}
if(root->val > a) {
root = root->left;
} else {
root = root->right;
}
}
}
while(root->left != NULL) {
root = root->left;
}
while(root != NULL) {
out << root->val << " ";
root = root->right;
}
//cout << root->val;
}
int main() {
int n;
in >> n;
sortT(n);
return 0;
}