将一个栈内的元素排序,只能再使用一个辅助的栈,不能再使用其他数据结构

  将一个栈内的元素排序,只能再使用一个辅助的栈,不能再使用其他数据结构

import java.util.ArrayList;
import java.util.Stack;

public class Main {
    public ArrayList<Integer> solve(int[] arr) {
        Stack<Integer> source = new Stack<>();

        //将数组中的元素存入栈中
        for (int num : arr) {
            source.push(num);
        }

        //调用排序函数,返回结果为一个栈
        Stack target = sort(source);
        ArrayList res = new ArrayList();

        //将排序好的栈存入ArrayList中
        for (Object element : target) {
            res.add(element);
        }

        //返回结果
        return res;
    }

    private Stack sort(Stack<Integer> source) {
        //辅助的栈
        Stack<Integer> help = new Stack<>();

        //从源栈中的第一个元素开始排序
        while (!source.isEmpty()) {

            //把源栈中的第一个元素弹出来存入一个临时变量中
            int t = source.pop();

            //以下操作将弹出来的元素t插入辅助栈的合适位置(大的值放在栈顶,小的放在栈底)
            if (!help.isEmpty()) {
                if (t < help.peek()) {
                    //以下操作把辅助栈中比t小的元素全部移入源栈中
                    while (!help.isEmpty() && t < help.peek()) {
                        source.push(help.pop());
                    }
                }
            }

            //把元素t放入合适的位置,使得t下面的元素都比它小
            help.push(t);
        }
        return help;
    }

    //测试样例
    public static void main(String[] args) {
        int arr[] = {4, 6, 22, 77, 5, 56, 555, 1, 3, 55, 23};
        ArrayList<Integer> solve = new Main().solve(arr);
        for (Integer integer : solve) {
            System.out.print(integer + " ");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值