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

10    if(left < right) {
                         11      int center =(left + right) / 2;
                         12      int p = 0;
                         13      int i;
                         14      int j = 0;
                         15      int k = left;
                         16      __mergesort(a, left, center);        /* 앞부분에 대한 병합 정렬 */
                         17      __mergesort(a, center + 1, right);    /* 뒷부분에 대한 병합 정렬 */
                         18      for(i = left; i <= center; i++)
                         19        buff[p++] = a[i];
                         20      while(i <= right && j < p)
                         21        a[k++] =(buff[j] <= a[i]) ? buff[j++] : a[i++];
                         22      while(j < p)
                         23        a[k++] = buff[j++];
                         24    }
                         25  }
                         26
                         27  /*--- 병합 정렬 함수 ---*/
                         28  int mergesort (int a[], int n)
                         29  {
                         30    if((buff = calloc(n, sizeof(int))) == NULL)
                         31      return -1;
                         32    __mergesort(a, 0, n – 1);   /* 배열 전체를 병합 정렬 */
                         33    free(buff);
                         34    return 0;
                         35  }                                                       실행 결과
                         36                                                    병합 정렬
                                                                               요소 개수 : 7
                         37  int main(void)
                                                                               x[0] : 22
                         38  {
                                                                               x[1] : 5
                         39    int i, nx;                                      x[2] : 11
                         40    int *x;             /* 배열의 첫 번째 요소에 대한 포인터 */   x[3] : 32
                         41    puts("병합 정렬");                                  x[4] : 120
                         42    printf("요소 개수 : ");                             x[5] : 68
                                                                               x[6] : 70
                         43    scanf("%d", &nx);
                                                                               오름차순으로 정렬했습니다.
                         44    x = calloc(nx, sizeof(int));
                                                                               x[0] = 5
                         45                                                    x[1] = 11
                         46    for(i = 0; i < nx; i++) {                       x[2] = 22
                         47      printf("x[%d] : ", i);                        x[3] = 32
                         48      scanf("%d", &x[i]);                           x[4] = 68
                                                                               x[5] = 70
                         49    }
                                                                               x[6] = 120
                         50    mergesort(x, nx);          /* 배열 x를 병합 정렬 */



                                                                                          06•정렬  251
   246   247   248   249   250   251   252   253   254   255   256