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

2. 요소의 개수가 적은 그룹을 먼저 푸시하는 경우
                        예를 들어  b  에서 꺼낸 a[0] ~ a[7]은 a[0] ~ a[1], a[2] ~ a[7]로 나누어집니다. 그런 다음 요

                        소의 개수가 적은 {0, 1}을 먼저 푸시하면 스택은  c  의 상태가 됩니다. 먼저 팝되어 나누어지
                        는 배열은 요소의 개수가 많은 그룹 {2, 7}입니다( d  ). 이렇게 하면 스택에 쌓여 있는 데이터
                        의 최대 개수는 4가 됩니다( g  ).


                          요소의 개수가 적은 그룹을 먼저 푸시합니다.


                             {0, 7}    {0, 7}을 분할  {0, 1}, {2, 7}  {2, 7}을 분할  {6, 7}, {2, 5}  {2, 5}를 분할





                                                                           2 5
                                                    2 7                    6 7        6 7
                              0 7                   0 1         0 1        0 1        0 1
                               a          b          c           d          e          f


                           {2, 3}, {4, 5}  {4, 5}를 분할  {2, 3}을 분할  {6, 7}을 분할  {0, 1}을 분할  종료



                              4 5
                              2 3        2 3
                              6 7        6 7        6 7
                              0 1        0 1        0 1         0 1
                               g          h           i          j          k          l
                                                 [그림 6-26] 스택의 변화 과정(3)


                        일반적으로 요소의 개수가 적은 배열일수록 적은 횟수로 분할을 종료할 수 있습니다. 따라서
                        1번과 같이 요소의 개수가 많은 그룹을 나누기보다는 요소의 개수가 적은 그룹을 먼저 나누

                        면 스택에 쌓여 있는 데이터의 최대 개수를 줄일 수 있습니다. 이때 1, 2번의 경우 모두 스택에
                        넣고 꺼내는 횟수는 같지만 스택에 쌓이는 데이터의 최대 개수는 달라집니다. 1번의 경우 배
                        열의 요소 개수가 n이라고 하면 스택에 쌓이는 데이터의 최대 개수는 log n보다 적습니다. 따

                        라서 요소의 개수가 백만 개여도 스택의 최대 용량은 20개면 충분합니다.


                                 Q15  실습 6-9, 6-10의 quick 함수를, 요소의 개수가 적은 그룹을 먼저 나누는 함수로 수정하세요.
                         연습
                         문제
                                 Q16    퀵 정렬은 요소의 개수가 적은 배열에 대해서는 처리가 아주 빠르게 진행되지는 않는다고
                                알려져 있습니다. Q15에서 작성한 두 quick 함수를 나눈 그룹의 요소 개수가 9개 이하이면 단순
                                삽입 정렬로 동작하는 함수로 수정하세요.


                                                                                          06•정렬  239
   234   235   236   237   238   239   240   241   242   243   244