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 알고리즘
   247   248   249   250   251   252   253   254   255   256   257