双栈排序

给定一组整数,利用两个栈来将它们排序

思路:声明两个栈S1,S2 我们约定将排好序的结果放在S2里面

0 当S1不为空:

1.先取出S1的栈顶元素A,

2.用S2的栈顶元素B跟A比较如果B>A则S2出栈并且推入S1直到S2中的栈顶元素小于A;

3.把A放进S2

4 返回 0

实现代码:

import java.util.ArrayList;
import java.util.Stack;

public class TwoStacks {

	static Stack<Integer> s1=new Stack<>();
	static Stack<Integer>  s2=new Stack<>();
	public static ArrayList<Integer> twoStacksSort(int[] numbers) {
        // write code here
		ArrayList<Integer> list=new ArrayList<>();
		for (Integer i : numbers) {
			s1.push(i);
		}
		
		while (!s1.isEmpty()) {
			
			int top=s1.pop();
			while (!s2.isEmpty()&&s2.peek()>top) {
				s1.push(s2.pop());
			}
			
			s2.push(top);
		}
		
		
		for (Integer i : s2) {
		
			list.add(i);
		}
		
		
		return list;
		
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int arr[]={3,4,2,1,5};
		ArrayList<Integer> list=twoStacksSort(arr);
		System.out.println(list);
	}

}

测试结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值