導航:首頁 > 編程語言 > python隊列快速排序

python隊列快速排序

發布時間:2025-05-24 10:11:34

python 演算法種類

python雖然具備很多高級模塊,也是自帶電池的編程語言,但是要想做一個合格的程序員,基本的演算法還是需要掌握,本文主要介紹列表的一些排序演算法
遞歸是演算法中一個比較核心的概念,有三個特點,1 調用自身 2 具有結束條件 3 代碼規模逐漸減少

② python鍑犵嶇粡鍏告帓搴忔柟娉曠殑瀹炵幇

姣旇緝鎺掑簭錛氶氳繃瀵規暟緇勪腑鐨勫厓緔犺繘琛屾瘮杈冩潵瀹炵幇鎺掑簭銆傞潪姣旇緝鎺掑簭錛氫笉閫氳繃姣旇緝鏉ュ喅瀹氬厓緔犻棿鐨勭浉瀵規″簭銆傜畻娉曞嶆潅搴﹀啋娉℃帓搴忔瘮杈冪畝鍗曪紝鍑犱箮鎵鏈夎璦綆楁硶閮戒細娑夊強鐨勫啋娉$畻娉曘

鍐掓場鎺掑簭鍐掓場鎺掑簭錛孊ubbleSort錛屾槸涓縐嶇畝鍗曠殑鎺掑簭綆楁硶銆傚畠閲嶅嶅湴閬嶅巻瑕佹帓搴忕殑鏁板垪錛屼竴嬈℃瘮杈冧袱涓鍏冪礌錛屽傛灉浠栦滑鐨勯『搴忛敊璇灝辨妸浠栦滑浜ゆ崲榪囨潵銆傞亶鍘嗘暟鍒楃殑宸ヤ綔鏄閲嶅嶅湴榪涜岀洿鍒版病鏈夊啀闇瑕佷氦鎹錛屼篃灝辨槸璇磋ユ暟鍒楀凡緇忔帓搴忓畬鎴愩

褰掑苟鎺掑簭錛圡ergesort錛夋槸寤虹珛鍦ㄥ綊騫舵搷浣滀笂鐨勪竴縐嶆湁鏁堢殑鎺掑簭綆楁硶銆傝ョ畻娉曟槸閲囩敤鍒嗘不娉曪紙DivideandConquer錛夌殑涓涓闈炲父鍏稿瀷鐨勫簲鐢ㄣ傚揩閫熸帓搴忕畻娉曞揩閫熸帓搴忔槸鐢變笢灝悸烽湇灝旀墍鍙戝睍鐨勪竴縐嶆帓搴忕畻娉曘

③ 面試必會八大排序演算法(Python)

一、插入排序

介紹

插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據。

演算法適用於少量數據的排序,時間復雜度為O(n^2)。

插入排演算法是穩定的排序方法。

步驟

①從第一個元素開始,該元素可以認為已經被排序

②取出下一個元素,在已經排序的元素序列中從後向前掃描

③如果該元素(已排序)大於新元素,將該元素移到下一位置

④重復步驟3,直到找到已排序的元素小於或者等於新元素的位置

⑤將新元素插入到該位置中

⑥重復步驟2

排序演示

演算法實現

二、冒泡排序

介紹

冒泡排序(Bubble Sort)是一種簡單的排序演算法,時間復雜度為O(n^2)。

它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。

原理

循環遍歷列表,每次循環找出循環最大的元素排在後面;

需要使用嵌套循環實現:外層循環控制總循環次數,內層循環負責每輪的循環比較。

步驟

①比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

②對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

③針對所有的元素重復以上的步驟,除了最後一個。

④持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

演算法實現:

三、快速排序

介紹

快速排序(Quicksort)是對冒泡排序的一種改進,借用了分治的思想,由C. A. R. Hoare在1962年提出。

基本思想

快速排序的基本思想是:挖坑填數 + 分治法。

首先選出一個軸值(pivot,也有叫基準的),通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。

實現步驟

①從數列中挑出一個元素,稱為 「基準」(pivot);

②重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊);

③對所有兩個小數列重復第二步,直至各區間只有一個數。

排序演示

演算法實現

四、希爾排序

介紹

希爾排序(Shell Sort)是插入排序的一種,也是縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。希爾排序是非穩定排序演算法,時間復雜度為:O(1.3n)。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

·插入排序在對幾乎已經排好序的數據操作時, 效率高, 即可以達到線性排序的效率;

·但插入排序一般來說是低效的, 因為插入排序每次只能將數據移動一位。

基本思想

①希爾排序是把記錄按下標的一定量分組,對每組使用直接插入演算法排序;

②隨著增量逐漸減少,每組包1含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,演算法被終止。

排序演示

演算法實現

五、選擇排序

介紹

選擇排序(Selection sort)是一種簡單直觀的排序演算法,時間復雜度為Ο(n2)。

基本思想

選擇排序的基本思想:比較 + 交換。

第一趟,在待排序記錄r1 ~ r[n]中選出最小的記錄,將它與r1交換;

第二趟,在待排序記錄r2 ~ r[n]中選出最小的記錄,將它與r2交換;

以此類推,第 i 趟,在待排序記錄ri ~ r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。

排序演示

選擇排序的示例動畫。紅色表示當前最小值,黃色表示已排序序列,藍色表示當前位置。

演算法實現

六、堆排序

介紹

堆排序(Heapsort)是指利用堆積樹(堆)這種數據結構所設計的一種排序演算法,它是選擇排序的一種。

利用數組的特點快速指定索引的元素。

基本思想

堆分為大根堆和小根堆,是完全二叉樹。

大根堆的要求是每個節點的值不大於其父節點的值,即A[PARENT[i]] >=A[i]。

在數組的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂。

排序演示

演算法實現

七、歸並排序

介紹

歸並排序(Merge sort)是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。

基本思想

歸並排序演算法是將兩個(或兩個以上)有序表合並成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合並為整體有序序列。

演算法思想

自上而下遞歸法(假如序列共有n個元素)

① 將序列每相鄰兩個數字進行歸並操作,形成 floor(n/2)個序列,排序後每個序列包含兩個元素;

② 將上述序列再次歸並,形成 floor(n/4)個序列,每個序列包含四個元素;

③ 重復步驟②,直到所有元素排序完畢。

自下而上迭代法

① 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合並後的序列;

② 設定兩個指針,最初位置分別為兩個已經排序序列的起始位置;

③ 比較兩個指針所指向的元素,選擇相對小的元素放入到合並空間,並移動指針到下一位置;

④ 重復步驟③直到某一指針達到序列尾;

⑤ 將另一序列剩下的所有元素直接復制到合並序列尾。

排序演示

演算法實現

八、基數排序

介紹

基數排序(Radix Sort)屬於「分配式排序」,又稱為「桶子法」。

基數排序法是屬於穩定性的排序,其時間復雜度為O (nlog(r)m) ,其中 r 為採取的基數,而m為堆數。

在某些時候,基數排序法的效率高於其他的穩定性排序法。

基本思想

將所有待比較數值(正整數)統一為同樣的數位長度,數位較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後,數列就變成一個有序序列。

基數排序按照優先從高位或低位來排序有兩種實現方案:

MSD(Most significant digital) 從最左側高位開始進行排序。先按k1排序分組, 同一組中記錄, 關鍵碼k1相等,再對各組按k2排序分成子組, 之後, 對後面的關鍵碼繼續這樣的排序分組, 直到按最次位關鍵碼kd對各子組排序後. 再將各組連接起來,便得到一個有序序列。MSD方式適用於位數多的序列。

LSD (Least significant digital)從最右側低位開始進行排序。先從kd開始排序,再對kd-1進行排序,依次重復,直到對k1排序後便得到一個有序序列。LSD方式適用於位數少的序列。

排序效果

演算法實現

九、總結

各種排序的穩定性、時間復雜度、空間復雜度的總結:

平方階O(n²)排序:各類簡單排序:直接插入、直接選擇和冒泡排序;

從時間復雜度來說:

線性對數階O(nlog₂n)排序:快速排序、堆排序和歸並排序;

O(n1+§))排序,§是介於0和1之間的常數:希爾排序 ;

線性階O(n)排序:基數排序,此外還有桶、箱排序。

④ 鎺掑簭綆楁硶python瀹炵幇

1銆佹瘮杈冩帓搴忥細閫氳繃瀵規暟緇勪腑鐨勫厓緔犺繘琛屾瘮杈冩潵瀹炵幇鎺掑簭銆傞潪姣旇緝鎺掑簭錛氫笉閫氳繃姣旇緝鏉ュ喅瀹氬厓緔犻棿鐨勭浉瀵規″簭銆傜畻娉曞嶆潅搴﹀啋娉℃帓搴忔瘮杈冪畝鍗曪紝鍑犱箮鎵鏈夎璦綆楁硶閮戒細娑夊強鐨勫啋娉$畻娉曘

2銆佸湪Python涓錛孭ython綆楁硶鏈夛細鎻掑叆鎺掑簭銆佸笇灝旀帓搴忋侀夋嫨鎺掑簭銆佸啋娉℃帓搴忋佸綊騫舵帓搴忋佸揩閫熸帓搴忋佸爢鎺掑簭銆佸熀鏁版帓搴忕瓑銆傚啋娉℃帓搴忓啋娉℃帓搴忎篃鏄涓縐嶇畝鍗曠洿瑙傜殑鎺掑簭綆楁硶銆

3銆佲懃閲嶅嶆ラ2鎺掑簭婕旂ず綆楁硶瀹炵幇鍐掓場鎺掑簭浠嬬粛鍐掓場鎺掑簭錛圔ubbleSort錛夋槸涓縐嶇畝鍗曠殑鎺掑簭綆楁硶錛屾椂闂村嶆潅搴︿負O(n^2)銆傚畠閲嶅嶅湴璧拌胯繃瑕佹帓搴忕殑鏁板垪錛屼竴嬈℃瘮杈冧袱涓鍏冪礌錛屽傛灉浠栦滑鐨勯『搴忛敊璇灝辨妸浠栦滑浜ゆ崲榪囨潵銆

閱讀全文

與python隊列快速排序相關的資料

熱點內容
收費app哪個最便宜 瀏覽:531
蘇州孕婦吃溯源碼燕窩真假 瀏覽:347
數據結構有哪些演算法 瀏覽:965
雲筆記怎麼查看隱藏文件夾 瀏覽:930
php不能上傳圖片 瀏覽:69
android仿qq登錄 瀏覽:789
奇怪命令大全 瀏覽:505
氮氣隔膜壓縮機 瀏覽:874
pdf文件怎麼轉化成jpg格式 瀏覽:452
archives解壓軟體 瀏覽:29
python模塊langid 瀏覽:891
phpexit函數 瀏覽:445
稅盤伺服器設置地址 瀏覽:625
桂林字牌在哪個app可以下 瀏覽:950
怎麼在網易伺服器上加材質包 瀏覽:779
u盤怎麼拖文件夾 瀏覽:169
銀行家演算法求取安全進程執行序列 瀏覽:534
dns的伺服器參數如何修改 瀏覽:698
程序員被碰瓷 瀏覽:446
安卓手機怎麼開啟無線顯示 瀏覽:964