演算法熟記 排序系列 歸併排序

2021-09-06 03:35:44 字數 741 閱讀 8808

1. 簡述

假設待排序陣列為 int array, 陣列長度為n。歸併排序是乙個遞迴得方法。

當n==1時,停止遞迴。

當n>1時,開闢乙個與array同樣大小得陣列,int tmp

將array[0]-array[n/2]得陣列遞迴排序,將array[n/2+1]-array[n-1]的陣列遞迴排序

將兩部分陣列,分別用兩個指標,將小得元素乙個乙個放入到tmp陣列中。

將tmp複製到array中,然後,釋放tmp陣列。

2. 複雜度

平均時間複雜度為o(n*logn),空間複雜度為o(n)。

穩定性是穩定得排序,注意程式中,兩個指標在比較得時候,如果大小相同,應該把第乙個指標得資料放到tmp中,就能保證是穩定得排序了。

3. **   

void

merge_sort(

intarray, 

intn) 

while

(a 2) 

while

(tmp[i

++] 

=array[a

++]) 

for(i=0

; i<

n; i++)

array[i] 

=tmp[i]; 

delete tmp;}

其中,最後得兩個while和乙個for語句中得複製,可以使用memcpy加快速度。

4. 參考資料

維基百科-歸併排序    

排序演算法系列之歸併排序

public class mergesort if index1 middle while index2 high else while index1 middle 將temp low high 序列複製到原序列 system.arraycopy temp,low,array,low,high 1 ...

排序演算法系列 1 歸併排序

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

排序系列六 歸併排序

這個排序有點費腦子,大家還得花時間好好看看 歸併排序原理如下圖所示 如下 歸併排序 mergesort 建立在歸併操作上的採用分治法的一種有效的排序演算法,將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。一般來說從單個...