版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Richard__Ting/article/details/87631283
Stacksort
学习内容总结自邓公算法训练营课程第一期第0周。
- 笔记
- 算法
//
// main.cpp
// T2_StackSort
// 输入n个数,利用栈排序对其从小打大输出
// Created by apple on 2019/2/19.
// Copyright © 2019 apple. All rights reserved.
//
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
stack<int> stackSort(stack<int> R);//声明堆排序
int main() {
int n;//n个数
cin >> n;
stack<int> myStack;//输入n个数
for(int i = 0;i < n; ++i) {
int tmp;
cin >> tmp;
myStack.push(tmp);
}
stack<int> result = stackSort(myStack);//进行栈排序
vector<int> ans;
while(!result.empty()) {//栈中数据压入向量
ans.push_back(result.top());
result.pop();
}
for(auto i = ans.rbegin(); i != ans.rend(); ++i) {
cout << *i << endl;//向量反序从小到大输出
}
return 0;
}
stack<int> stackSort(stack<int> R) {//栈排序实现
stack<int> S;//结果输出栈
if(R.empty()){return S;}//判断 输入栈 R是否为空
int tmp = R.top();//将 R中栈顶取出
R.pop();
while(!R.empty() || (!S.empty() && S.top() > tmp)) {
//判断 R栈是否为空 or 是否为 R栈最后一个元素
if(S.empty() || S.top() <= tmp) {
//判断 S栈是否为空 or S栈底->栈顶是否从小到大
S.push(tmp);
tmp = R.top();
R.pop();
} else {//否则将 S栈栈顶元素取出放入 R栈
R.push(S.top());
S.pop();
}
}
S.push(tmp);//输入 R栈最后一个元素
return S;
}
- 问题解决