挑戰程式設計競賽選讀 歸併排序

2021-10-24 16:23:56 字數 748 閱讀 7232

之前介紹的排序演算法,如插入排序、選擇排序具有高達o(n

2)o(n^2)

o(n2

)級的複雜度,使它們在面對大規模輸入時無能為力。歸併排序利用分治思想,可將排序複雜度降低到o(n

logn

)o(nlogn)

o(nlog

n)量級,大大加快了排序速度。

基本原理:將一未排序序列歸分為兩個子串行,對子序列排序後,將他們按順序合併,並對子序列遞迴進行上述過程。如何正確的合併兩個已排序序列是歸併排序的核心。

複雜度:劃分到最後一層時,可得n

nn個單獨元素,因此最多可劃分至log

2nlog_2n

log2​n

層,每層總的元素均為n

nn,每層進行合併操作時,共需進行n

nn次比較,由此完成整個合併(排序完畢)共需nlo

g2nnlog_2n

nlog2​

n次比較,即歸併排序的時間複雜度為nlo

gnnlogn

nlogn級。

排序**:

c++實現:

void merge(vector&a, int left,int mid,int right)

}

rust實現(待更新):

程式設計實現歸併排序

歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已 有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。歸併過程為 ...

歸併排序(2 路歸併排序)

遞迴寫法 include define maxn 100 void merge int a,int l1,int r1,int l2,int r2 將陣列a的區間 l1,r1 和區間 l2,r2 合併為乙個有序區間 else while i r1 while j r2 for int i 0 i非遞...

python歸併排序 python 歸併排序

排序思路 1.將陣列分成兩組a,b,建立臨時陣列 c,c長度 a b 2.i,j分別屬於a,b 3.若a i b j 將b j 放入c,j 否則 a i 放入c,i 4.迴圈3步驟,將a或b中剩餘的元素放入c,再將c複製到陣列中 5.遞迴3 4直到a,b序列的長度 1 歸併排序 class merg...