题目
一个栈中元素的类型为整型,现在想将该栈从顶到底从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?
解法
申请一个help栈,从数据栈中依次弹出元素进行判断:
- 如果help栈空或者当前元素的值小于等于help栈顶元素,直接入help栈。
- 如果当前元素的值大于help的栈顶元素,将help的栈内元素依次弹出,直到当前元素小于等于help栈的栈顶元素。
import java.util.Stack;
public class stackSortByStack {
public static void stackSortByStack(Stack<Integer> stack){
Stack<Integer> help = new Stack<Integer>();
while(!stack.isEmpty()){
Integer cur = stack.pop();
while(!help.isEmpty() && cur > help.peek()){
stack.push(help.pop());
}
help.push(cur);
}
while(!help.isEmpty()){
stack.push(help.pop());
}
}
}
测试
import java.util.Stack;
public class a1_b5_stackSortByStack {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(5);
stack.push(3);
stack.push(4);
stack.push(2);
stack.push(11);
stackSortByStack.stackSortByStack(stack);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}