병합 정렬은 재귀 알고리즘이며 시간 복잡도는 다음과 같은 반복 관계로 표현할 수 있습니다.
T (n) = 2T (n / 2) + ɵ (n)
위의 반복은 반복 트리 방법 또는 마스터 방법을 사용하여 해결할 수 있습니다. 마스터 방법의 II에 해당하고 재귀의 해가 ɵ (n log n) 인 경우에 해당합니다.
병합 정렬은 항상 배열을 두 반으로 나누고 선형 시간을 사용하여 두 반쪽을 병합하므로 병합 정렬의 시간 복잡도는 3 가지 경우 (최악, 평균 및 최고)에서 all (nLogn)입니다.
입력 배열을 두 반으로 나누고 두 반쪽을 호출 한 다음 정렬 된 두 반쪽을 병합합니다. merg () 함수는 두 개의 반쪽을 병합하는 데 사용됩니다. 병합 (arr, l, m, r)은 arr [l..m] 및 arr [m + 1..r]이 정렬되어 정렬 된 두 하위 배열을 하나로 병합한다고 가정하는 핵심 프로세스입니다. 자세한 내용은 다음 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이 될 때까지 배열이 두 개 반으로 재귀 적으로 나뉘어져 있음을 알 수 있습니다. 크기가 1이되면 병합 프로세스가 작동하고 전체 배열이 될 때까지 배열 병합을 다시 시작합니다. 합병.