아래와 같은 합병정렬(merge sort)에서는 매 단계에서 합병함수(merge)를 사용하게 된다. 길이 N/2인 두 개의 리스트를 합병함수를 사용하여 합병할 경우, 필요한 최소의 비교횟수로 옳은 것은?
void MergeSort(int A[ ], int First, int Last)
{ if (First < Last)
{ int Middle = (First + Last) / 2;
MergeSort(A, First, Middle);
MergeSort(A, Middle+1, Last);
Merge(A, First, Middle, Last);
}
}
-
-
-
-
해설
순환합병정렬에 대한 알고리즘이다. 길이 N/2인 두 개의 리스트를 합병할 경우 최소 비교횟수는 N/2이다. 만약 한쪽의 모든 원소(N/2)가 다른 한쪽의 모든 원소(N/2)보다 작다면 모두 비교하지 않아도 되기 때문이다.