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

31        printf("a[%d] : ", i);
                         32        scanf("%d", &a[i]);
                         33      } while(a[i] < a[i - 1]);
                         34    }
                         35    printf("b[0] : ");
                         36    scanf("%d", &b[0]);
                         37    for(i = 1; i < nb; i++) {
                         38      do {
                         39        printf("b[%d] : ", i);
                         40        scanf("%d", &b[i]);
                         41      } while(b[i] < b[i - 1]);
                         42    }
                         43
                         44    /* 배열 a와 b를 병합하여 c에 저장 */
                         45    merge(a, na, b, nb, c);
                         46    puts("배열 a와 b를 병합하여 배열 c에 저장했습니다.");
                         47    for(i = 0; i < na + nb; i++)
                         48      printf("c[%2d] = %2d\n", i, c[i]);
                         49    free(a); free(b); free(c);
                         50
                         51    return 0;
                         52  }



                        실습 6-13은 3개의 반복문을 늘어놓는 단순한 알고리즘으로 구현되어 있습니다. 병합에 필
                        요한 시간 복잡도는 O(n)입니다.




                        병합 정렬

                        정렬을 마친 배열의 병합을 응용하여 분할 정복법에 따라 정렬하는 알고리즘을 병합 정렬
                        (merge sort)이라고 합니다. 그림 6-29는 병합 정렬을 간단히 나타낸 것으로, 먼저 배열을 앞
                        부분과 뒷부분으로 나눕니다. 이 그림은 배열의 요소 개수가 12개이므로 6개의 배열로 각각

                        나눕니다. 나눈 두 배열을 각각 정렬하고 병합하면 배열 모두를 정렬할 수 있습니다.














                                                                                          06•정렬  249
   244   245   246   247   248   249   250   251   252   253   254