今天要弄的是快排,這是面試排序算法中較難的一塊,也是基礎的一塊。
該算法思路如下:
首先我找一個基準數(shù),然后將要排序的數(shù)列剩下的數(shù)依次與基準數(shù)比較,如果比較的數(shù)比基準數(shù)大,則將它放在基準數(shù)的右邊,如果這個數(shù)比基準數(shù)小,則將它放在基準數(shù)的左邊,這樣基準數(shù)的左右就出現(xiàn)了兩個全新的數(shù)列,一個全比基準數(shù)大,一個全比基準數(shù)小,此時對這兩個數(shù)列分別找一個基準數(shù),根據(jù)上面的方法再次進行排序,這樣進行到某一個基準數(shù)的左數(shù)列或者右數(shù)列旁邊數(shù)列的長度小于2的時候,則結束排序,將左數(shù)列或者右數(shù)列跟基準數(shù)合并后返回。

快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為較小和較大的2個子序列,然后遞歸地排序兩個子序列。
步驟為:
挑選基準值:從數(shù)列中挑出一個元素,稱為“基準”(pivot),
分割:重新排序數(shù)列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準后面(與基準值相等的數(shù)可以到任何一邊)。在這個分割結束之后,對基準值的排序就已經(jīng)完成,
遞歸排序子序列:遞歸地將小于基準值元素的子序列和大于基準值元素的子序列排序。
遞歸到最底部的判斷條件是數(shù)列的大小是零或一,此時該數(shù)列顯然已經(jīng)有序。
選取基準值有數(shù)種具體方法,此選取方法對排序的時間性能有決定性影響。
該算法時間復雜度為O(nlogn)
接下去是我的JavaScript代碼的實現(xiàn):

這就是今天要介紹并實現(xiàn)的算法,每天一個,強身健腦,明天見!