|
-------------------------------------------------------------------------------
void
MergeSort(int A[ ], int Low, int High) /*
입력: A[Low:High] - 정렬하려는 배열 */
/*
Low, High - 정렬할 원소가 있는 곳을 나타내는
최소, 최대 인덱스 */
/*
출력: A[Low:High] - 정렬된 배열 */
{
int
Mid;
/*a*/ if(Low
< High)
{
/*b*/ Mid
= (Low + High)/2;
/*c*/ MergeSort(A[
], Low, Mid);
/*d*/ MergeSort(A[
], Mid+1, High);
/*e*/
Merge(A[
], Low, Mid, High);
}
}
/*
머지 정렬
알고리즘
*/
void
Merge(int A[ ], int Low, int Mid, int High)
/*
입력: A[Low:Mid], A[Mid+1:High] - 정렬된
두 배열 */
/*
출력: A[Low:High]-A[Low:Mid]와 A[Mid+1:High]를
합병하여 정렬된 배열 */
{
int
B[NUM_OF_KEYS];
int
i, LeftPtr, RightPtr, BufPtr;
/*1*/
LeftPtr
= Low; RightPtr = Mid + 1; BufPtr = Low;
/*2*/
while(LeftPtr
<= Mid && RightPtr <= High)
/*3*/
if(A[LeftPtr]
< A[RightPtr])
/*4*/
B[BufPtr++]
= A[LeftPtr++];
/*5*/
else
B[BufPtr++] = A[RightPtr++];
/*6*/
if
(LeftPtr > Mid)
/*7*/ for
(i = RightPtr; i <= High; i++)
/*8*/ B[BufPtr++]
= A[i];
else
/*9*/ for
(i=LeftPtr; i <= Mid; i++)
/*10*/ B[BufPtr++]
= A[i];
/*11*/ for
(i = Low; i <= High; i++)
/*12*/ A[i]
= B[i];
} /*
머지 알고리즘 */
-------------------------------------------------------------------------------
|