91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么實現快速排序

發布時間:2021-07-02 16:07:26 來源:億速云 閱讀:185 作者:Leah 欄目:大數據

今天就跟大家聊聊有關Python中怎么實現快速排序,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

 

快速排序(Quick Sort)

歸并排序的思路:分裂再合并,在合并的過程中完成排序

快速排序的思路:分揀再分裂

依據一個“中值”數據項,將數據表分成兩半,小于中值的一半和大于中值的一半,然后每個部分遞歸地進行快速排序

如果希望左右兩個部分的數據項個數相同,則應該找到數據表的中位數,然而找到中位數需要付出大量的計算開銷,通常選擇將第一個元素作為中值

快速排序代碼思路:

  • 設置第一個元素為中值,從第二個元素開始,分好兩部分元素

  • 將第一個元素(中值)放到合適的位置

遞歸三要素:

  • 基本結束條件:數據表僅有一個元素,則代表已經排序好了

  • 縮小規模:根據中值,將數據表分成兩部分

  • 調用自身:兩部分分別調用自身進行快速排序

將數據表分成兩部分的方法:

設置左右標號(left和right),將第一個元素作為中值

  • 左標(left)從第二個元素開始向右移動,碰到比中值大的則停止

  • 右標(right)從末尾開始向左移動,碰到比中值小的則停止

  • 判斷左標是否已經超過了右標

  • 若沒有,交換左右標所指的數據

  • 若left>right則停止移動,此時right位置就是中值位置,將中值交換到right處

完成分裂的過程其實也就完成了排序的一部分工作,由于while循環要執行結束后才會繼續后面的程序(即left和right要停止才會結束),故要先判斷是否已經 left>right

Python中怎么實現快速排序

Python中怎么實現快速排序

   

算法分析

快速排序過程分為兩部分:分裂和移動

  • 分裂過程:若兩部分規模相當則時間復雜度O(logn)

  • 移動過程:時間復雜度O(n)

綜上所述,快速排序的時間復雜度O(nlogn)

并且快速排序運行過程中不需要額外的存儲空間

但是,如果運氣不好,中值所在的分裂點過于偏離中部,造成左右兩部分數量不平衡,極端情況下,有一部分始終沒有數據,這樣時間復雜度就退化到了O(n^2)

看完上述內容,你們對Python中怎么實現快速排序有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

房产| 金昌市| 青岛市| 永寿县| 台中县| 秦安县| 波密县| 南澳县| 星子县| 皮山县| 山东省| 视频| 荔波县| 永嘉县| 玛多县| 来凤县| 兴海县| 襄垣县| 泰顺县| 得荣县| 南部县| 大化| 邮箱| 如东县| 鲁山县| 汝州市| 团风县| 玉环县| 望都县| 和平区| 工布江达县| 礼泉县| 射洪县| 即墨市| 朝阳区| 隆回县| 乐亭县| 三门峡市| 长子县| 洛宁县| 马关县|