快速排序

今天要弄的是快排,這是面試排序算法中較難的一塊,也是基礎的一塊。

該算法思路如下:

首先我找一個基準數(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ù)合并后返回。

這是快速排序的動態(tài)圖

快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為較小和較大的2個子序列,然后遞歸地排序兩個子序列。

步驟為:

挑選基準值:從數(shù)列中挑出一個元素,稱為“基準”(pivot),

分割:重新排序數(shù)列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準后面(與基準值相等的數(shù)可以到任何一邊)。在這個分割結束之后,對基準值的排序就已經(jīng)完成,

遞歸排序子序列:遞歸地將小于基準值元素的子序列和大于基準值元素的子序列排序。

遞歸到最底部的判斷條件是數(shù)列的大小是零或一,此時該數(shù)列顯然已經(jīng)有序。

選取基準值有數(shù)種具體方法,此選取方法對排序的時間性能有決定性影響。

該算法時間復雜度為O(nlogn)

接下去是我的JavaScript代碼的實現(xiàn):


快排的實現(xiàn)

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容