目錄
?非遞歸的快排:
代碼分析:?
代碼演示:
?非遞歸的快排:
眾所周知,遞歸變成非遞歸,而如果還想具有遞歸的功能,那么遞歸的那部分則需要變成循環來實現。
而再我們的排序中,我們可以采取棧的方式,用入棧、出棧、棧是否為空來完成遞歸的部分。?
如圖所示,這是序列分割時的圖片,我們可以將一段序列的最左端下標和最右端下標丟入棧內,隨后賦予臨時變量之后出棧,然后利用臨時變量組成的區間將序列進行一次的快排
快排結束返回key值,再根據key值繼續劃分序列,并且再度傳入序列的最左端和最右端下標入棧隨后立馬賦予臨時變量然后出棧,這樣用入棧和出棧來控制循環。
代碼分析:?
這串代碼的本質是利用了棧的后進先出的原理,以及二叉樹后序遍歷的原理。
當一個元素入棧后立馬出棧,只要序列不是只剩下一個元素,那么它會帶入兩個元素入棧。
而這入棧,同時也是一種遍歷,如下代碼所示,通過計算我們得知最開始是數組的前端后入棧,但是是先出棧,出棧后他會帶著四個元素入棧,而后端的兩個下標則是被壓倒了棧底,直到前端不能再入棧了后端才會出棧并且帶四個元素入棧。?
代碼演示:
?