程序员代码面试指南刷题--第一章.用一个栈实现另一个栈的排序

题目描述

一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?

输入描述:

第一行输入一个N,表示栈中元素的个数
第二行输入N个整数aia_iai​表示栈顶到栈底的各个元素

输出描述:

输出一行表示排序后的栈中栈顶到栈底的各个元素。

示例1
输入
5
5 8 4 3 6

输出
8 6 5 4 3

解法一:oj有点难过

import java.io.*;
import java.util.*;
public class Main{
     
    public static void main(String[] args)throws IOException{
     
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int len = Integer.parseInt(br.readLine());
        String[] ss = br.readLine().trim().split(" ");
        Stack<Integer> s = new Stack<>();
        for(int i=len-1;i>=0;i--){
     
            s.push(Integer.parseInt(ss[i]));
        }
        sort(s);
        while(!s.isEmpty()){
     
                System.out.print(s.pop()+" ");
         }
    }
    public static void sort(Stack<Integer> s){
     
        Stack<Integer> help = new Stack<>();
        while(!s.isEmpty()){
     
            int tmp = s.pop();
            while(!help.isEmpty()&&help.peek()<tmp){
     
                s.push(help.pop());
            }
                help.push(tmp);
            }
        while(!help.isEmpty()){
     
            s.push(help.pop());
        }
    }
}

你可能感兴趣的:(程序员代码面试指南刷题)