程序员代码面试指南第二版 5.用一个栈实现另一个栈的排序
题目描述
题目描述
一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。
除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?
输入描述:
第一行输入一个N,表示栈中元素的个数
第二行输入N个整数a_i表示栈顶到栈底的各个元素
输出描述:
输出一行表示排序后的栈中栈顶到栈底的各个元素。
示例1
输入
5
5 8 4 3 6
输出
8 6 5 4 3
标准写法, 但是只能通过76%的例子
import java. util. Stack;
import java. util. Scanner;
public class Main {
public static void main ( String[ ] args) {
Scanner sc = new Scanner ( System. in) ;
int n = Integer. valueOf ( sc. nextLine ( ) ) ;
String[ ] arr = sc. nextLine ( ) . split ( " " ) ;
Stack< Integer> s = new Stack < > ( ) ;
for ( int i= arr. length- 1 ; i>= 0 ; i-- ) {
s. push ( Integer. valueOf ( arr[ i] ) ) ;
}
Stack< Integer> help = new Stack < > ( ) ;
reversedOrder ( s, help) ;
while ( ! s. isEmpty ( ) )
System. out. print ( s. pop ( ) + " " ) ;
}
public static void reversedOrder ( Stack< Integer> s, Stack< Integer> help) {
int curr;
while ( ! s. isEmpty ( ) ) {
curr = s. pop ( ) ;
while ( ! help. isEmpty ( ) && curr > help. peek ( ) ) {
s. push ( help. pop ( ) ) ;
}
help. push ( curr) ;
}
while ( ! help. isEmpty ( ) )
s. push ( help. pop ( ) ) ;
}
}