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 알고리즘