mergeSort(A[], p, r) ▷ A[p...r]을 정렬한다
{
if (p < r) then {
q ← (p+q)/2; ----------------- ① ▷ p, q의 중간 지점 계산
mergeSort(A, p, q); ---------- ② ▷ 전반부 정렬
mergeSort(A, q+1, r); -------- ③ ▷ 후반부 정렬
merge(A, p, q, r);------------ ④ ▷ 합병
}
}
merge(A[], p, q, r)
{
정렬되어 있는 두 배열 A[p...q]와 A[q+1...r]을 합하여
정렬된 하나의 배열 A[p...r]을 만든다.
}
void merge( int data[], int p, int q, int r){
int i = p, j = q+1, k = p;
int tmp[data.length()];
while (i <= q && j <= r) {
if (data[i] <= data[j])
tmp[k++] = data[i++];
else
tmp[k++] = data[j++];
}
while (i <= q)
tmp[k++] = data[i++];
while (j <= r)
tmp[k++] = data[j++];
for (int i = p; i <= r; i++)
data[i] = tmp[i];
}
Reference