1. 程式人生 > >程式設計師面試經典--棧排序

程式設計師面試經典--棧排序

3.6問題:

編寫程式,按升序對棧進行排序(即最大元素位於棧頂)。最多隻能使用一個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中(如陣列)。

思考:

待排序棧s1,將自己的資料從棧頂不斷的出棧按升序插入臨時資料棧s2。插入操作時,可將s1作為緩衝,直到插入操作完成。

import java.util.*;
class sort{
	public static void main(String args[]){
		Stack<Integer> s = new Stack<Integer>();
		s.push(5);
		s.push(4);
		s.push(3);
		s.push(2);
		s.push(1);
		Stack<Integer> r = stackSort(s);
		while(!r.isEmpty()){
			System.out.println(r.pop());
		}
		
	}
	
	public static Stack<Integer> stackSort(Stack<Integer> s){
		Stack<Integer> r = new Stack<Integer>();
		while(!s.isEmpty()){
			int tmp = s.pop();
			while(!r.isEmpty()&&r.peek()>tmp){
				s.push(r.pop());
			}
			r.push(tmp);
		}
		return r;
	}
}
注意排序前棧內的資料儲存順序,排序後資料的儲存順序,以及打印出來的資料順序。