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

을 {70, 68, 91, 32, 11, 57, 22}로 바꾸어 보겠습니다.



                   다음은 순서를 뒤바꾸는 과정을 나타낸 그림입니다. 먼저 그림  a 처럼 맨 앞의 요소 a[0]과 맨
                   뒤의 요소 a[6]의 값을 교환합니다. 이어서 그림  b 와 그림  c 처럼 각각 하나씩 안쪽의 요솟값
                   을 교환합니다.


                               1    2     3     4    5     
                    a    22   57    11   32    91    68   70

                                         교환
                          0        2     3     4         6
                    b    70   57    11   32    91    68   22       교환 횟수 = 요소 개수/2

                                         교환
                          0    1         3         5     6
                    c    70   68    11   32    91    57   22
                                         교환

                          0    1    2     3     4    5     6
                    d    70   68    91   32    11    57   22
                                       [그림 2-9] 배열 요소를 역순으로 정렬


                   교환 횟수는 ‘요소 개수/2’이며, 이 나눗셈에서 나머지는 버립니다. 위 예제에서 볼 수 있듯이

                   요소 개수가 홀수인 경우 가운데 요소는 교환할 필요가 없기 때문입니다.
                      ‘정수 / 정수’ 연산은 나머지를 버리고 정수부만 얻을 수 있으므로 나머지를 버리기에 좋습니다(요소 개수가 7인 경우
                   교환 횟수는 7/2, 곧 3입니다).


                   요소 개수가 n인 배열을 처리하는 과정을 변수 i의 값을 0, 1, …로 증가하는(increment)
                   방법을 통해 간단히 나타내면 다음과 같습니다.


                     1. 왼쪽 요소의 인덱스(그림의 ● 안의 값)    … i          n이 7이면   0 ⇨ 1 ⇨ 2
                     2. 오른쪽 요소의 인덱스(그림의 ● 안의 값)  … n - i – 1     n이 7이면   6 ⇨ 5 ⇨ 4



                   그러므로 요소 개수가 n인 배열 요소를 역순으로 정렬하는 알고리즘을 간단히 나타내면 다음

                   과 같습니다.


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






                   64   C 알고리즘
   59   60   61   62   63   64   65   66   67   68   69