#include <iostream>
#include <stack>
using namespace std;
class stacksort
{
stack<int> * o_stack;
stack<int> * b_stack;
stack<int> * r_stack;
public: stacksort()
{
o_stack = new stack<int>();
b_stack = new stack<int>();
r_stack = new stack<int>();
}
public: void push(int i)
{
o_stack->push(i);
}
public: int pop()
{
int tempi = o_stack->top();
o_stack->pop();
return tempi;
}
public : void sort_stack()
{
while(!o_stack->empty() || !b_stack->empty())
{// if one of the two is not empty;
int min;
if(!o_stack->empty())
{// when we pop something we must consider whether the right value can be poped rather than null
min = o_stack->top();
o_stack->pop();
while(!o_stack->empty())
{
int min_cddt = o_stack->top();
o_stack->pop();
if(min_cddt<min)
{
b_stack->push(min);
min = min_cddt;
}
else
{
b_stack->push(min_cddt);
}
}
r_stack->push(min);
}
if(!b_stack->empty())
{
min = b_stack->top();
b_stack->pop();
while(!b_stack->empty())
{
int min_cddt2 = b_stack->top();
b_stack->pop();
if(min_cddt2<min)
{
o_stack->push(min);
min = min_cddt2;
}
else
{
o_stack->push(min_cddt2);
}
}
r_stack->push(min);
}
}
delete o_stack;
o_stack = 0;
delete b_stack;
b_stack = 0;
o_stack=r_stack;
}
};
int main()
{
stacksort ss;
int a[7] = {1,23,-2,-43,-243,-33,3332};
for(int i = 0;i<7;++i)
{
ss.push(a[i]);
}
ss.sort_stack();
for(int i = 0;i<7;++i)
{
cout << ss.pop()<<" ->> ";
}
return 0;
}