Page 252 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 252
51 puts("오름차순으로 정렬했습니다.");
52 for(i = 0; i < nx; i++)
53 printf("x[%d] = %d\n", i, x[i]);
54 free(x); /* 배열을 해제 */
55
56 return 0;
57 }
merge.c의 주요 부분을 보면서 프로그램을 좀 더 자세히 살펴보겠습니다.
static void __mergesort(int a[], int left, int right)
{
if(left < right) {
int center = (left + right) / 2;
/* 중략 : 변수 선언 */
__mergesort(a, left, center); /* 앞부분에 대한 병합 정렬 */
__mergesort(a, center + 1, right); /* 뒷부분에 대한 병합 정렬 */
/* 중략 : 앞부분과 뒷부분을 병합 */
/* 중략 : 앞부분과 뒷부분을 병합 */
}
}
int mergesort(int a[], int n)
{
if((buff = calloc(n, sizeof(int))) == NULL)
A
return -1;
__mergesort(a, 0, n – 1); /* 배열 전체를 병합 정렬 */ B
free(buff);
return 0;
}
A mergesort 함수는 병합한 결과를 일시적으로 저장할 작업용 배열인 buff를 생성합니다.
B 그런 다음 실제로 정렬 작업을 수행할 __mergesort 함수를 호출합니다.
252 C 알고리즘