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