题目要求如下:
试设计算法,将栈S中的元素排序。要求不用辅助数据结构,仅通过对S自身的操作完成S中元素的排序。
实现思路如下:
借鉴冒泡排序的思路利用递归实现栈的排序,空间复杂度为O(1)
代码如下:
#include"pch.h"
#include<iostream>
#include<stack>
#include<cstdlib>
#include<ctime>
using namespace std;
const int LENGTH = 10;
stack<int> initialStack()
{
stack<int> result;
for (int i = 0; i < 10; i++)
{
result.push(rand() % 10);
}
return result;
}
void printStack(stack<int> st)
{
for (int i = 0; i < 10; i++)
{
cout << st.top();
st.pop();
if (i != 9)
cout << " ";
else
cout << endl;
}
}
void helpReorderStack(stack<int>& st, int tag)
{
if (st.size() == 0)
{
st.push(tag);
return;
}
int num = st.top();
st.pop();
if (num > tag)
{
int temp = num;
num = tag;
tag = temp;
}
helpReorderStack(st, tag