Recursion 使用递归和不使用额外空间对堆栈进行排序

Recursion 使用递归和不使用额外空间对堆栈进行排序,recursion,data-structures,stack,Recursion,Data Structures,Stack,我正在尝试编写一个代码,用于在不使用额外空间的情况下对堆栈进行排序。这在逻辑上是正确的,但我的输出是完全随机的。有人能指出我的错误吗 void insertatsortstack(int element, stack<int> s){ if(s.empty()==1 || element > s.top()) { s.push(element); return; } int temp=s.top();

我正在尝试编写一个代码,用于在不使用额外空间的情况下对堆栈进行排序。这在逻辑上是正确的,但我的输出是完全随机的。有人能指出我的错误吗

void insertatsortstack(int element, stack<int> s){

    if(s.empty()==1 || element > s.top())
    {
        s.push(element);
        return;
    }

    int temp=s.top();
    s.pop();
    insertatsortstack(element,s);
    s.push(temp);
}

void sortstack(stack<int> s){
    if(s.size()>0){
        int element=s.top();
        s.pop();
        sortstack(s);
        insertatsortstack(element,s);
    }
}
void insertatsortstack(int元素,堆栈s){
如果(s.empty()==1 | | element>s.top())
{
s、 推(元件);
返回;
}
int temp=s.top();
s、 pop();
insertatsortstack(元素,s);
s、 推动(温度);
}
无效排序堆栈(堆栈s){
如果(s.size()>0){
int元素=s.top();
s、 pop();
索茨塔克(s);;
insertatsortstack(元素,s);
}
}

我认为您来自Java背景。您正在函数中传递值,这些函数将生成堆栈的副本,并且原始堆栈不会更改。您需要通过引用传递值

void insertatsortstack(int element, stack<int> & s);
void sortstack(stack<int> &s);
void insertatsortstack(int元素、堆栈&s);
无效索茨塔克(烟囱和烟囱);


(假设您使用的是std::stack)

缩进似乎也是随机的,因此很难读取……您是否尝试过Valgrind或其他方法?如果结果是随机的,我怀疑内存有问题。
逻辑上是正确的,但我的输出是完全随机的
。。。这不是一个完全的矛盾吗?你真的需要在现实世界中这样做,还是这是一个家庭作业问题?我的投票是不使用堆栈进行排序。取而代之的是,跳入一个数据结构,比如数组,它更容易用于排序。然后,重新加载堆栈。当我做了一个试运行,根据我的正确,是的,这不是一个家庭作业的问题。我正在解决来自gfg的问题,以详细了解并使其对我即将进行的工作有用。在旁注上,您说过您实施此操作是为了不使用额外空间,但我认为您失败了。因为,因为您使用的是递归,所以您在运行时堆栈中消耗了大量空间…请尝试用英语写下您希望代码执行的操作。一步一步地。使用一副牌或一堆硬币,用手模拟这些步骤。然后编写代码在计算机上实现该解决方案。