Stacksort 栈排序的简单例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
  • 问题解决

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Richard__Ting/article/details/87631283