利用辅助栈进行栈排序
将要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur。
如果cur小于或等于help的栈顶元素,则将cur直接压入help;
如果cur大于help的栈顶元素,则将help的元素逐一弹出,逐一压入stack,直到cur小于或等于help的 栈顶元素,再将cur压入help。 一直执行以上操作,直到stack中的全部元素都压入到help。最后将help中的所有元素逐一压入stack,即完成 排序。
public static void sort(Stack stack){
Stack<Integer> help = new Stack<>();
while ( ! stack.empty()){
// 终止条件是stack栈内元素全部弹栈
Integer cur = stack.pop(); //取stack得栈顶数据
while ((!help.empty()) && help.peek()<cur ){
// peek()是查看栈顶元素
// 如果help的栈为空则跳出循环
// 保证stack的栈内从上到下为升序
// 不满足 help.peek()<cur的help的栈顶元素弹出压入stack栈内
stack.push(help.pop());
}
// 走到这一步说明satck的栈顶元素小大于此cur或help栈为空 即将cur压入help栈内
help.push(cur);
}
while (! help.isEmpty()) {
// 将help栈里的元素压入stack栈里,此时stack栈里从上到下为降序
stack.push(help.pop());
}
}