Cod sursa(job #1388968)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 15 martie 2015 20:56:56
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

struct Node
{
    int key;
    Node *st, *dr;

    explicit Node() : key(0), st(NULL), dr(NULL) {
    }

    Node(const int k) : key(k), st(NULL), dr(NULL) {
    }
};

Node* join(Node* &A, Node* &B)
{
    if (!A) return B;
    if (!B) return A;

    if (A->key > B->key)
        swap(A, B);

    if (rand() & 1)
        swap(A->st, A->dr);

    A->st = join(A->st, B);

    return A;
}

int removeMin(Node* &H)
{
    int k = H->key;
    H = join(H->st, H->dr);

    return k;
}

void initHeap(Node* &H)
{
    H = NULL;
    srand(time(NULL));
}

int main()
{
    ifstream in("algsort.in");
    ofstream out("algsort.out");

    int N, a;

    in >> N;

    Node *H;
    initHeap(H);

    for ( int i = 1; i <= N; ++i )
    {
        in >> a;
        Node *n = new Node(a);
        H = join(H, n);
    }

    for ( int i = 1; i <= N; ++i )
        out << removeMin(H) << " ";

    return 0;
}