利用辅助栈进行栈排序


利用辅助栈进行栈排序


将要排序的栈记为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());
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值