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

두 값의 교환
                        배열의 역순 정렬은 요소 교환이 총 n/2회 필요합니다. 그럼 두 값은 어떻게 교환할까요? 그

                        림 2-10을 보면서 살펴보겠습니다(교환값을 x, y라고 하겠습니다).


                        교환을 위해 같은 자료형을 가진 변수(t)를 하나 더 사용합니다.



                                                  교환 전                                교환 후
                                  x
                           2             1     x   57          57          13          13
                            y           t      y   13          13          13          57

                                  3            t    -          57          57          57
                                                       1  t = x;   2  x = y;   3  y = t;
                                                   [그림 2-10] 두 값의 교환


                        여기서 사용하는 작업용 변수를 t라 하면 교환 과정은 아래와 같습니다.


                          1  x 값을 t에 보관                                x → t
                          2  y 값을 x에 대입                                y → x    x와 y의 값을 교환
                          3  t에 보관한 처음 x 값을 y에 대입                      t → y


                            주의할 점! 두 값의 교환을 오른쪽처럼 수행하면 안 됩니다.      y → x
                        두 변수 x와 y 값이 모두 대입 전의 y 값으로 되기 때문입니다.      x → y

                        그런데 배열 요소를 역순으로 정렬하는 과정에서 교환하는 값은 x와 y가 아니라 배열 a의 두

                        요소 a[i]와 a[n – i – 1]의 값입니다. 이를 적용하여 요소 개수가 n인 int형 배열 a의 요소를 역
                        순으로 정렬하는 프로그램의 한 부분은 다음과 같습니다.


                         int i;
                         for(i = 0; i < n / 2; i++) {
                            int t = a[i];
                            a[i] = a[n – i - 1];  a[i]와 a[n-i-1]의 값을 교환
                            a[n – i - 1] = t;
                         }



                        이때 반복해서 수행해야 하는 두 값을 교환하는 과정을 함수 형식 매크로(function-like

                        macro)로 구현하면 프로그램이 짧아지고 읽기도 쉬워집니다.



                                                                                      02• 기본 자료구조  65
   60   61   62   63   64   65   66   67   68   69   70