演算法模板 歸併排序 超短

2021-10-10 04:16:47 字數 569 閱讀 3886

歸併排序演算法:字面意思,歸併兩個有序的區間。基於分治思想

應用:排序中最經典,必須掌握

時間複雜度沒有平均和最壞,每次歸併排序時間複雜度都是o(nlogn),空間複雜度o(n) 因為要開額外的陣列來儲存歸併的結果。

1.劃分區間一分為二。

2.先歸併排序左區間,再歸併排序右區間。

3.左右兩個區間都是有序的,採用二路歸併法,歸併到乙個臨時陣列。

4.將臨時陣列的值拷貝回原陣列

void

merge_sort

(int a,

int l ,

int r)

while

(i <= mid) t[k++

]= a[i++];

while

(j <= r) t[k++

]= a[j++];

//拷貝回原陣列

for(

int i =

0, j = l; j <= r ; j++

, i ++

) a[j]

= t[i]

;}

歸併排序模板

歸併 將兩個或兩個以上的有序表組合成乙個新的有序表。一般情況不用這種方式排序,只有在將多個有序序列整合成乙個有序序列是才會用到歸併排序,才能想歸併效率體現的最高。演算法描敘 1 設初始序列含有n個記錄,則可看成n個有序的子串行,每個子串行長度為1。2 兩兩合併,得到 n 2 個長度為2或1的有序子串...

歸併排序模板

歸併排序主要的思想是分治和合併,合併我覺得挺好理解的,分治是用遞迴實現的感覺不太好理解,我就貼乙個模板,拿著就能用了。要是像仔細學習了解歸併排序的話可以看下這篇文章傳送門,感覺講的不能再詳細了。歸併排序模板 include include include include include define...

歸併排序模板

思路 每次把陣列分成兩部分,一直遞迴下去,當分成最少長度後,開始從最底層向上歸併相鄰的兩段陣列。時間複雜度o n log n include include include using namespace std void merge int a,int left,int right,int mid...