亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

武隆县| 河北区| 河东区| 那曲县| 兖州市| 延津县| 铜梁县| 勃利县| 凌海市| 甘肃省| 五寨县| 尼木县| 正安县| 南涧| 宁海县| 雷州市| 三河市| 监利县| 罗平县| 确山县| 枣强县| 吴川市| 云南省| 固始县| 苗栗县| 周宁县| 永德县| 平遥县| 泸西县| 通城县| 怀仁县| 潼关县| 柘荣县| 东乌珠穆沁旗| 梧州市| 宁安市| 若尔盖县| 义乌市| 汶川县| 景东| 睢宁县|