교환 함수

2909 단어
두 수의 값 을 교환 하 는 것 은 흔히 볼 수 있 는 작업 이다. 일반적인 상황 에서 우 리 는 두 수의 값 을 교환 하면 임시 변 수 를 만 든 다음 에 순환 대 가 를 하고 범 형 프로 그래 밍 사상 을 더 하면 다음 코드 와 같다.
1 template 
2 Swap(T & a,T & b)
3 {
4     T tmp = a ;
5     a = b ;
6     b = tmp ;
7 }

그러나 어떤 면접 이나 알고리즘 을 연구 하 는 사람들의 생각 은 비교적 독특 하거나, 당신 의 생각 이 그렇게 많은 지 보 세 요.그래서 한 가지 문 제 를 제기 했다. 임시 변 수 를 사용 하지 않 는 방법 으로 두 개의 수 를 교환 하여 공간 을 절약 할 수 있 느 냐 는 것 이다.
목적, 그래서 우 리 는 이것 이 임시 변 수 를 사용 하지 않 는 상황 에서 우 리 는 어떻게 두 개의 변수 로 이 일련의 조작 을 완성 하 는 지 고려 해 야 한다.이때 우 리 는 두 개의 변수 만 있 습 니 다. 만약 에 두 개의 값 을 각각 한 변수 에 저장 하면 교환 을 완성 할 수 없 을 것 입 니 다. 이때 우 리 는 한 변수 로 두 개의 값 을 저장 할 수 있 는 지, 한 변 수 는 한 개의 값 을 저장 할 수 있 는 지 생각해 야 합 니 다.아래 코드 참조
1 void  Swap(int &a, int &b)
2 {
3     a = a + b;
4     b = a - b;
5     a = a - b;
6 }

우 리 는 하나의 변 수 를 사용 하여 두 개의 값 을 저장 하고 상쇄 를 통 해 두 변수 간 의 교환 을 실현 했다.그러나 이렇게 되면 문제 도 있다. 두 변 수 를 더 한 조작 을 했 기 때문에 넘 치 는 결 과 를 초래 할 수 있다.넘 치지 않도록 두 변수의 값 을 교환 하 는 방법 은 이 럴 때 위치 연산 을 사용 해 야 합 니 다.코드 는 다음 과 같다.
1 void  Swap(int &a, int &b)
2 {
3     a = a ^ b;
4     b = a ^ b;
5     a = a ^ b;
6 }

두 변수 간 의 차이 나 조작 을 통 해 두 변수 간 의 교환 을 실현 할 수 있다.다른 방식 을 사용 하면 넘 치 는 상황 을 잘 피 할 수 있 습 니 다. 주어진 값 이 넘 치지 않 는 다 면 함수 로 교환 해도 절대 넘 치지 않 습 니 다.

좋은 웹페이지 즐겨찾기