开辟临时栈进行存放
// stackSort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
void sortStack(stack<int> &s);
int _tmain(int argc, _TCHAR* argv[])
{
stack<int> toSortStack;
toSortStack.push(3);
toSortStack.push(4);
toSortStack.push(1);
toSortStack.push(7);
toSortStack.push(9);
sortStack(toSortStack);
printf("after sort:");
while(!toSortStack.empty())
{
printf("%d", toSortStack.top());
toSortStack.pop();
}
printf("\n");
system("pause");
return 0;
}
void sortStack(stack<int> &s)
{
if(s.empty())
return;
stack<int> tmpStack1;
while(!s.empty())
{
int topElement = s.top();
s.pop();
if(tmpStack1.empty() || topElement>tmpStack1.top())
{
// s top number > tmp stack1, just push it in
tmpStack1.push(topElement);
}
else
{
//s top number <= tmp stack 1 top
//pop stack1 out to stack2 when (s.top <= stack1.top || stack1 is empty)
stack<int> tmpStack2;
while(!tmpStack1.empty() && topElement <= tmpStack1.top() )
{
tmpStack2.push(tmpStack1.top());
tmpStack1.pop();
}
//push s.top to stack2
tmpStack2.push(topElement);
//push stack2 back to stack1
while(!tmpStack2.empty())
{
tmpStack1.push(tmpStack2.top());
tmpStack2.pop();
}
}
}
//push stack1 back to outStack
while(!tmpStack1.empty())
{
s.push(tmpStack1.top());
tmpStack1.pop();;
}
}