
1. 변수 한 개를 추가로 생성한다.
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
return;
}
2. xor 연산을 사용한다.
void swap(int *a, int *b){
*a ^= *b;
*b ^= *a;
*a ^= *b;
return;
}
3. 덧셈 연산을 사용한다.
void swap(int *a, int *b){
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
return;
}
// 또는 더 간단하게
void swap(int *a, int *b){
*a += *b;
*b = *a - *b;
*a -= *b;
return;
}
- 방법은 간편하지만 추가로 변수를 생성해야 한다는 단점이 존재하고 (메모리 관점에서 손해)
- 방법과 3. 방법은 변수를 생성할 필요가 없지만, 사람이 직관적으로 이해하기에는 다소 무리가 있다는 단점이 있다. (가독성 측면에서 손해) 하지만 2. 방법에서는 xor이라는 생소한 개념을 사용하는 반면, 3. 에서는 우리에게 익숙한 + 연산을 사용하므로 구현하기에 무리가 없다.
c++에서 독립적인 함수를 만든다는 가정하에 void형 반환 타입과 포인터 변수를 사용했다.

만약 독립적인 함수가 아닌 다른 함수 내부에서 구현한다고 하더라도, 다음과 같이 a와 b 자리에 값을 바꾸고자 하는 변수를 위치시키면 된다.