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

첫 번째 분할에 의해 배열이 왼쪽 그룹(a[0] ~ a[1])과 오른쪽 그룹(a[2] ~ a[7])으로 나누어집니

                        다. 여기서 오른쪽 그룹은 다시 왼쪽 그룹(a[2] ~ a[5])과 오른쪽 그룹(a[6] ~ a[7])으로 나누어집
                        니다. 배열을 나눈 다음에 수행하는 ‘스택에 푸시하는 부분’의 코드를 다시 보겠습니다.


                         if(left < pr) {
                           Push(&lstack, left);    /* 왼쪽 그룹 범위의 */
                           Push(&rstack, pr);      /* 인덱스를 푸시합니다. */
                         }


                         if(pl < right) {
                           Push(&lstack, pl);      /* 오른쪽 그룹 범위의 */
                           Push(&rstack, right);   /* 인덱스를 푸시합니다. */
                         }



                        두 if문은 아래의 순서대로 왼쪽 그룹 범위의 값과 오른쪽 그룹 범위의 값을 푸시합니다.


                         1. 왼쪽 그룹의 인덱스 left와 pr을 푸시합니다.
                         2. 오른쪽 그룹의 인덱스 pl과 right를 푸시합니다.



                        그림 6-24는 정렬이 시작될 때부터 정렬이 끝날 때까지의 스택 변화를 나타낸 것입니다.


                          왼쪽 그룹을 먼저 푸시합니다.
                                                          왼쪽 그룹을 먼저 푸시합니다(분할을 나중에 수행).
                                                          오른쪽 그룹을 나중에 푸시합니다(분할을 먼저 수행).
                             {0, 7}   {0, 7}을 분할  {0, 1}, {2, 7}  {2, 7}을 분할  {2, 5}, {6, 7}  {6, 7}을 분할




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

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




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


                                                                                          06•정렬  237
   232   233   234   235   236   237   238   239   240   241   242