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 알고리즘
   225   226   227   228   229   230   231   232   233   234   235