您的位置:首页 > 其它

算法题:双栈排序

2015-08-20 23:18 260 查看

题目描述

请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。

给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。

测试样例:
[1,2,3,4,5]

返回:[5,4,3,2,1]


class TwoStacks {
public:
vector<int> twoStacksSort(vector<int> numbers) {
// write code here
stack<int> st1;
stack<int> st2;
int n = numbers.size();
if(n<=1)return numbers;
int temp;
for(int i=0;i<n;i++)
{
temp = numbers[i];
for(;st1.empty()==false;)
{
if(temp<st1.top())
{
st2.push(st1.top());
st1.pop();
}
else
{
break;
}
}
st1.push(temp);
while(st2.empty()==false)
{
st1.push(st2.top());
st2.pop();
}
}
vector<int> v;
while(st1.empty()==false)
{
v.push_back(st1.top());
st1.pop();
}
return v;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: