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 建立在歸併操作上的採用分治法的一種有效的排序演算法,將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。一般來說從單個...