Pagini recente » Cod sursa (job #1176968) | Statistici Bobes Bianca (bia_bobes) | Cod sursa (job #238918) | Cod sursa (job #483640) | Cod sursa (job #1388968)
#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;
}