? 一個棧中元素的類型為整型,現在想將該棧從頂到底按從大到小的順序排序,只許申請一個棧。除此之外,可以申請新的變量,但是不能申請額外的數據結構,如何完成排序?
思路:
? ? 將要排序的棧記為stack,申請的輔助棧記為help.在stack上執行pop操作,彈出的元素記為cru.
? ? ? 如果cru小于或等于help的棧頂元素,則將cru直接壓入help.
? ? ? 如果cru大于help的棧頂元素,則將help的元素逐一彈出,逐一壓入stack,直到cru小于或等于help的棧頂元素,再將cru壓入help.
一直執行以上操作,直到stack中的全部元素壓入到help,最后將heip中的所有元素逐一壓入stack,完成排序。
?
其實和維持單調棧的思路挺像的,只是彈出后沒有丟棄,接著放。
和基礎排序也挺像。
?
import java.util.Stack;
public class a{public static void sortStackByStack(Stack<Integer> stack){Stack<Integer> help=new Stack<Integer>();while(!stack.isEmpty()){int cru=stack.pop();while(!help.isEmpty()&&help.peek()<cru){stack.push(help.pop());}help.push(cru);}while (!help.isEmpty()) {stack.push(help.pop()); }}
}
?