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;
}
1. 방법은 간편하지만 추가로 변수를 생성해야 한다는 단점이 존재하고 (메모리 관점에서 손해)
2. 방법과 3. 방법은 변수를 생성할 필요가 없지만, 사람이 직관적으로 이해하기에는 다소 무리가 있다는 단점이 있다. (가독성 측면에서 손해)
하지만 2. 방법에서는 xor이라는 생소한 개념을 사용하는 반면, 3. 에서는 우리에게 익숙한 + 연산을 사용하므로 구현하기에 무리가 없다.
c++에서 독립적인 함수를 만든다는 가정하에 void형 반환 타입과 포인터 변수를 사용했다.
만약 독립적인 함수가 아닌 다른 함수 내부에서 구현한다고 하더라도, 다음과 같이 a와 b 자리에 값을 바꾸고자 하는 변수를 위치시키면 된다.
LIST
'Programming Language > C, C++' 카테고리의 다른 글
[C++] 파일 입출력 - dfs [2] (0) | 2022.12.21 |
---|---|
[C++] 파일 입출력 - 텍스트 파일 읽기 [1] (0) | 2022.12.21 |
[C++] list 자료형 사용하기 - Quick Note (2) | 2022.09.23 |
[C++] int와 string 사이 형변환 방법 (0) | 2022.09.02 |