Page 230 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 230
07 void quick (int a[], int left, int right)
실행 결과
08 {
퀵 정렬
09 int pl = left; /* 왼쪽 커서 */
요소 개수 : 9
10 int pr = right; /* 오른쪽 커서 */ x[0] : 5
11 int x = a[(pl + pr) / 2]; /* 피벗은 가운데 요소를 선택합니다. */ x[1] : 8
12 do { x[2] : 4
13 while(a[pl] < x) pl++; x[3] : 2
x[4] : 6
14 while(a[pr] > x) pr--;
x[5] : 1
15 if(pl <= pr) {
x[6] : 3
16 swap(int, a[pl], a[pr]); 실습 6-8과 x[7] : 9
17 pl++; 같습니다. x[8] : 7
18 pr--; 오름차순으로 정렬했습니다.
19 } x[0] = 1
x[1] = 2
20 } while(pl <= pr);
x[2] = 3
21 if(left < pr) quick(a, left, pr);
x[3] = 4
22 if(pl < right) quick(a, pl, right); x[4] = 5
23 } x[5] = 6
24 x[6] = 7
25 int main(void) x[7] = 8
x[8] = 9
26 {
27 int i, nx;
28 int *x; /* 배열의 첫 번째 요소에 대한 포인터 */
29 puts("퀵 정렬");
30 printf("요소 개수 : ");
31 scanf("%d", &nx);
32 x = calloc(nx, sizeof(int));
33 for(i = 0; i < nx; i++) {
34 printf("x[%d] : ", i);
35 scanf("%d", &x[i]);
36 }
37 quick(x, 0, nx – 1); /* 배열 x에 대해서 퀵 정렬합니다. */
38 puts("오름차순으로 정렬했습니다.");
39 for(i = 0; i < nx; i++)
40 printf("x[%d] = %d\n", i, x[i]);
41 free(x); /* 배열을 해제 */
42
43 return 0;
44 }
230 C 알고리즘