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