
一文讀懂如何用Python實現(xiàn)6種排序算法
總結(jié)了一下常見集中排序的算法
歸并排序也稱合并排序,是分治法的典型應(yīng)用。分治思想是將每個問題分解成個個小問題,將每個小問題解決,然后合并。
具體的歸并排序就是,將一組無序數(shù)按n/2遞歸分解成只有一個元素的子項,一個元素就是已經(jīng)排好序的了。然后將這些有序的子元素進(jìn)行合并。
合并的過程就是 對 兩個已經(jīng)排好序的子序列,先選取兩個子序列中最小的元素進(jìn)行比較,選取兩個元素中最小的那個子序列并將其從子序列中
去掉添加到最終的結(jié)果集中,直到兩個子序列歸并完成。
代碼如下:
穩(wěn)定,時間復(fù)雜度 O(nlog n)
代碼如下:
穩(wěn)定,時間復(fù)雜度 O(n^2)
交換兩個元素的值python中你可以這么寫:a, b = b, a,其實這是因為賦值符號的左右兩邊都是元組
(這里需要強(qiáng)調(diào)的是,在python中,元組其實是由逗號“,”來界定的,而不是括號)。
選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最?。ù螅┰兀娣诺?
排序序列的起始位置,然后,再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所
有元素均排序完畢。
不穩(wěn)定,時間復(fù)雜度 O(n^2)
希爾排序,也稱遞減增量排序算法,希爾排序是非穩(wěn)定排序算法。該方法又稱縮小增量排序,因DL.Shell于1959年提出而得名。
先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為d1的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進(jìn)行排序;
然后,取第二個增量d2
不穩(wěn)定,時間復(fù)雜度 平均時間 O(nlogn) 最差時間O(n^s)1
"堆”的定義:在起始索引為 0 的“堆”中:
節(jié)點 i 的右子節(jié)點在位置 2 * i + 24) 節(jié)點 i 的父節(jié)點在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操作
堆的特性:
每個節(jié)點的鍵值一定總是大于(或小于)它的父節(jié)點
“最大堆”:
“堆”的根節(jié)點保存的是鍵值最大的節(jié)點。即“堆”中每個節(jié)點的鍵值都總是大于它的子節(jié)點。
上移,下移 :
當(dāng)某節(jié)點的鍵值大于它的父節(jié)點時,這時我們就要進(jìn)行“上移”操作,即我們把該節(jié)點移動到它的父節(jié)點的位置,而讓它的父節(jié)點到它的位置上,然后我們繼續(xù)判斷該節(jié)點,直到該節(jié)點不再大于它的父節(jié)點為止才停止“上移”。
現(xiàn)在我們再來了解一下“下移”操作。當(dāng)我們把某節(jié)點的鍵值改小了之后,我們就要對其進(jìn)行“下移”操作。
方法:
我們首先建立一個最大堆(時間復(fù)雜度O(n)),然后每次我們只需要把根節(jié)點與最后一個位置的節(jié)點交換,然后把最后一個位置排除之外,然后把交換后根節(jié)點的堆進(jìn)行調(diào)整(時間復(fù)雜度 O(lgn) ),即對根節(jié)點進(jìn)行“下移”操作即可。 堆排序的總的時間復(fù)雜度為O(nlgn).
代碼如下:
不穩(wěn)定,時間復(fù)雜度 O(nlog n)
快速排序算法和合并排序算法一樣,也是基于分治模式。對子數(shù)組A
快速排序的分治過程的三個步驟為:
分解:把數(shù)組A
分為A與A[q+1...r]兩部分,其中A中的每個元素都小于等于A[q]而A[q+1...r]中的每個元素都大于等于A[q];
解決:通過遞歸調(diào)用快速排序,對子數(shù)組A
和A[q+1...r]進(jìn)行排序;
合并:因為兩個子數(shù)組是就地排序的,所以不需要額外的操作。
對于劃分partition 每一輪迭代的開始,x=A[r], 對于任何數(shù)組下標(biāo)k,有:
1) 如果p≤k≤i,則A[k]≤x。
2) 如果i+1≤k≤j-1,則A[k]>x。
3) 如果k=r,則A[k]=x。
代碼如下:
不穩(wěn)定,時間復(fù)雜度 最理想 O(nlogn)最差時間O(n^2)
說下python中的序列:
列表、元組和字符串都是序列,但是序列是什么,它們?yōu)槭裁慈绱颂貏e呢?序列的兩個主要特點是索引操作符和切片操作符。索引操作符讓我們可以從序列中抓取一個特定項目。切片操作符讓我們能夠獲取序列的一個切片,即一部分序列,如:a = ['aa','bb','cc'], print a[0] 為索引操作,print a[0:2]為切片操作。CDA數(shù)據(jù)分析師培訓(xùn)
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
用 SQL 生成逆向回滾 SQL:數(shù)據(jù)操作的 “后悔藥” 指南? 在數(shù)據(jù)庫操作中,誤刪數(shù)據(jù)、錯改字段或誤執(zhí)行批量更新等問題時有發(fā)生。 ...
2025-07-14如何考取數(shù)據(jù)分析師證書:以 CDA 為例? ? 在數(shù)字化浪潮席卷各行各業(yè)的當(dāng)下,數(shù)據(jù)分析師已然成為企業(yè)挖掘數(shù)據(jù)價值、驅(qū)動決策的 ...
2025-07-14t檢驗與Wilcoxon檢驗的選擇:何時用t.test,何時用wilcox.test? t 檢驗與 Wilcoxon 檢驗的選擇:何時用 t.test,何時用 wilcox. ...
2025-07-14AI 浪潮下的生存與進(jìn)階: CDA數(shù)據(jù)分析師—開啟新時代職業(yè)生涯的鑰匙(深度研究報告、發(fā)展指導(dǎo)白皮書) 發(fā)布機(jī)構(gòu):CDA數(shù)據(jù)科 ...
2025-07-13LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計的實用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點,而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗:捕捉數(shù)據(jù)背后的時間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗:數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費者需求的重要途徑,而統(tǒng)計學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07