Cod sursa(job #1653299)

Utilizator razvandRazvan Dumitru razvand Data 15 martie 2016 20:49:56
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 3.68 kb
#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;
}