Page 248 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 248

2  이 while문의 실행 조건은  1  의 과정을 통해 배열 b의 모든 요소를   배열 c로 복사하고 배

                   열 a에는 아직 복사하지 못한 요소가 남아 있는 상태를 전제로 합니다. 커서 pa를 한 칸씩 진
                   행하면서 복사하지 않은 모든 배열 a의 요소를 배열 c에 복사합니다.


                    3  이 while문의 실행 조건은  1 의 과정을 통해 배열 a의 모든 요소를   배열 c로 복사하고 배

                   열 b에는 아직 복사하지 못한 요소가 남아 있는 상태를 전제로 합니다. 커서 pb를 한 칸씩 진
                   행하면서 복사하지 않은 모든 배열 b의 요소를   배열 c에 복사합니다.

                     실습 6-13                                               •완성 파일 chap06/merge_ary.c

                     01  /* 정렬을 마친 배열을 병합하는 프로그램 */
                                                                                  실행 결과
                     02  #include <stdio.h>
                                                                              a의 요소 개수 : 6
                     03                                                       b의 요소 개수 : 7
                     04  /*---정렬을 마친 배열 a와 b를 병합하여 c에 저장 ---*/                a[0] : 2
                     05  void merge (const int a[], int na, const int b[], int nb, int c[])  a[1] : 4
                     06  {                                                    a[2] : 6
                                                                              a[3] : 8
                     07    int pa = 0;
                                                                              a[4] : 11
                     08    int pb = 0;
                                                                              a[5] : 13
                     09    int pc = 0;                                        b[0] : 1
                     10    while(pa < na && pb < nb)                          b[1] : 2
                                                                       1
                     11      c[pc++] =(a[pa] <= b[pb]) ? a[pa++] : b[pb++];   b[2] : 3
                     12    while(pa < na)                                     b[3] : 4
                                                                       2      b[4] : 9
                     13      c[pc++] = a[pa++];
                                                                              b[5] : 16
                     14    while(pb < nb)
                                                                       3      b[6] : 21
                     15      c[pc++] = b[pb++];                               배열 a와 b를 병합하여
                     16  }                                                    배열 c에 저장했습니다.
                     17                                                       c[ 0] =  1
                     18  int main(void)                                       c[ 1] =  2
                                                                              c[ 2] =  2
                     19  {
                                                                              c[ 3] =  3
                     20    int i, na, nb;
                                                                              c[ 4] =  4
                     21    int *a, *b, *c;                                    c[ 5] =  4
                     22    printf("a의 요소 개수 : "); scanf("%d", &na);           c[ 6] =  6
                     23    printf("b의 요소 개수 : "); scanf("%d", &nb);           c[ 7] =  8
                     24    a = calloc(na, sizeof(int));                       c[ 8] =  9
                                                                              c[ 9] = 11
                     25    b = calloc(nb, sizeof(int));
                                                                              c[10] = 13
                     26    c = calloc(na + nb, sizeof(int));
                                                                              c[11] = 16
                     27    printf("a[0] : ");                                 c[12] = 21
                     28    scanf("%d", &a[0]);
                     29    for(i = 1; i < na; i++) {
                     30      do {




                   248   C 알고리즘
   243   244   245   246   247   248   249   250   251   252   253