思路:类似于插入排序,每次遇到一个更小的就将前面的都弹出将其插入到正确的位置,再将弹出的再压回来。

#include <iostream>
#include <stack>
using namespace std;
int main(){
    int n, temp;
    stack<int> s1,s2;
    cin>>n;
    while(n--){
        cin>>temp;
        s1.push(temp);
    }
    while(!s1.empty()){
        if(s2.empty()){
            s2.push(s1.top());
            s1.pop();
        }
        else{
            temp=s1.top();
            s1.pop();
            while(!s2.empty()&&s2.top()>temp){
                s1.push(s2.top());
                s2.pop();
            }
            s2.push(temp);
        }
    }
    while(!s2.empty()){
        cout<<s2.top()<<" ";
        s2.pop();
    }
}