マージソートは再帰的なアルゴリズムであり、時間の複雑さは次の再帰関係として表現できます。
T(n)= 2T(n / 2)+ɵ(n)
上記の再発は、Recurrence TreeメソッドまたはMasterメソッドのいずれかを使用して解決できます。マスターメソッドのケースIIに該当し、再発の解はɵ(n log n)です。
マージソートは常に2つの半分に配列を分割し、2つの半分をマージするのに線形時間を要するため、マージソートの時間の複雑さは3つすべての場合(最悪、平均、および最高)でɵ(nLogn)です。
入力配列を2つの半分に分割し、2つの半分に対して自分自身を呼び出し、ソートされた2つの半分をマージします。merg()関数は、2つの半分をマージするために使用されます。merge(arr、l、m、r)は、arr [l..m]とarr [m + 1..r]がソートされていると想定し、ソートされた2つのサブ配列を1つにマージする主要なプロセスです。詳細については、次のC実装を参照してください。
MergeSort(arr[], l, r)
If r > l
1. Find the middle point to divide the array into two halves:
middle m = (l+r)/2
2. Call mergeSort for first half:
Call mergeSort(arr, l, m)
3. Call mergeSort for second half:
Call mergeSort(arr, m+1, r)
4. Merge the two halves sorted in step 2 and 3:
Call merge(arr, l, m, r)
ダイアグラムを詳しく見ると、サイズが1になるまで、配列が再帰的に2つの半分に分割されていることがわかります。サイズが1になると、マージプロセスが実行され、配列が完全になるまで配列のマージが開始されます合併しました。