1、思路
使用一个辅助栈help
来对原栈stk
进行排序,在stk
上执行pop
操作,弹出的元素记为cur
:
- 若
cur ≤ help.top()
,则cur
压入help
栈中;
- 若
cur > hel.top()
,则将help
中元素逐一弹出并压入stk
中,直到cur ≤ help.top()
为止,再将cur
压入help
中;
- 循环前两步操作,直到所有元素都压入
help
栈中,此时help
栈中元素已经从小到大排列好,最后倒入stk
栈中即可。
2、代码
#include <iostream> #include <stack> using namespace std; void sortStack(stack<int>& stk) { stack<int> help; //辅助栈 while (!stk.empty()) { int cur = stk.top(); stk.pop(); while (!help.empty() && cur > help.top()) //步骤1与2 { stk.push(help.top()); help.pop(); } help.push(cur); } while (!help.empty()) //将help栈元素倒入stk栈中 { stk.push(help.top()); help.pop(); } } int main() { int n; cin >> n; stack<int> stk; while (n -- ) { int num; cin >> num; stk.push(num); } sortStack(stk); while (!stk.empty()) { cout << stk.top() << " "; stk.pop(); } return 0; }