栈元素的排序

来源:互联网 发布:淘宝和京东的采购模式 编辑:程序博客网 时间:2024/05/18 03:22

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

给定一个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 herevector<int> temp;if (numbers.empty()){return temp;}// 只要原栈还有数据,就要循环到最后while (numbers.size()!=0) {if (temp.empty()) {temp.insert(temp.begin(), numbers[0]);// 栈底元素的加numbers.erase(numbers.begin());} else {if (numbers[0] >= temp[0]) {temp.insert(temp.begin(), numbers[0]);//temp.push_back(temp.begin());numbers.erase(numbers.begin());} else {int temp1 = numbers[0];numbers.erase(numbers.begin());while (!temp.empty() && temp[0] > temp1) {numbers.insert(numbers.begin(), temp[0]);temp.erase(temp.begin());}temp.insert(temp.begin(), temp1);}}}return temp;}};void  main(){TwoStacks S;vector<int> mat1;vector<int> mat2;mat1.push_back(1); mat1.push_back(2) ; mat1.push_back(3);mat1.push_back(4);mat1.push_back(5);   mat1.push_back(6); mat2=S.twoStacksSort(mat1);for ( int i = 0 ; i< mat2.size() ; i++){cout<< mat2[i]<<" ";}
}

                                             
0 0
原创粉丝点击