您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Python中怎么實現快速排序,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
快速排序(Quick Sort)
歸并排序的思路:分裂再合并,在合并的過程中完成排序
快速排序的思路:分揀再分裂
依據一個“中值”數據項,將數據表分成兩半,小于中值的一半和大于中值的一半,然后每個部分遞歸地進行快速排序
如果希望左右兩個部分的數據項個數相同,則應該找到數據表的中位數,然而找到中位數需要付出大量的計算開銷,通常選擇將第一個元素作為中值
快速排序代碼思路:
設置第一個元素為中值,從第二個元素開始,分好兩部分元素
將第一個元素(中值)放到合適的位置
遞歸三要素:
基本結束條件:數據表僅有一個元素,則代表已經排序好了
縮小規模:根據中值,將數據表分成兩部分
調用自身:兩部分分別調用自身進行快速排序
將數據表分成兩部分的方法:
設置左右標號(left和right),將第一個元素作為中值
左標(left)從第二個元素開始向右移動,碰到比中值大的則停止
右標(right)從末尾開始向左移動,碰到比中值小的則停止
判斷左標是否已經超過了右標
若沒有,交換左右標所指的數據
若left>right則停止移動,此時right位置就是中值位置,將中值交換到right處
完成分裂的過程其實也就完成了排序的一部分工作,由于while循環要執行結束后才會繼續后面的程序(即left和right要停止才會結束),故要先判斷是否已經 left>right
算法分析
快速排序過程分為兩部分:分裂和移動
分裂過程:若兩部分規模相當則時間復雜度O(logn)
移動過程:時間復雜度O(n)
綜上所述,快速排序的時間復雜度O(nlogn)
并且快速排序運行過程中不需要額外的存儲空間
但是,如果運氣不好,中值所在的分裂點過于偏離中部,造成左右兩部分數量不平衡,極端情況下,有一部分始終沒有數據,這樣時間復雜度就退化到了O(n^2)
看完上述內容,你們對Python中怎么實現快速排序有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。