2개의 정수형 변수의 값을 교환(Swap)하는 방법

시작하기전에

프로그래밍을 하다가 보면 두개의 변수의 값을 교환해야 하는 경우가 있습니다.
프로그래머들 각각 저마다 선호하는 방법이 있을겁니다.
그 방법중에서 제가 이용하는 방법들을 아래에 정리해봤습니다. 각기 장단점이 있으나 성능상의 큰 차이는 거의 무시할 정도라는 점에서 어떤것이 최고라고 단언할수는 없을것 같습니다.

첫번째, 임시저장영역을 이용한 방법

임시 변수를 이용하여 두개의 변수를 교환하는 가장 보편적이고 직관적인 방법중에 하나인데 반드시 정수형 변수일 필요는 없고 대부분의 변수형에 적용될수 있는 방법이라는 점이 장점이나 임시 저장영역이 필요하다는것이 단점입니다.
void mzswap_1(int *s_left, int *s_right) 
{ 
    int s_temp; 
    s_temp = *s_left; 
    *s_left = *s_right; 
    *s_right = s_temp; 
}


두번째, 덧셈과 뺄셈을 이용하는 방법

덧셈과 뺄셈의 연산만으로 두개의 변수를 교환하는 방법입니다. 직관성은 다소 떨어지는 단점이 있으나 임시 저장영역이 필요없다는 것이 장점입니다.
void mzswap_2(int *s_left, int *s_right) 
{ 
    *s_left += *s_right; 
    *s_right = *s_left - *s_right; 
    *s_left -= *s_right; 
}


세번째, XOR 논리연산을 이용하는 방법

XOR 논리 연산만으로 두개의 변수를 교환하는 방법입니다. 직관성은 떨어지는 단점이 있으나 비교적 연산이 가벼우며 임시저장영역이 필요없다는 것이 장점입니다.
void mzswap_3(int *s_left, int *s_right) 
{ 
    *s_left ^= *s_right; 
    *s_right ^= *s_left; 
    *s_left ^= *s_right; 
}



/*

[ FrontPage | PrintView | RawView | RSS ]

Copyright ⓒ MINZKN.COM
All Rights Reserved.

MINZKN

----

*/