DataStructure

Swap

S0LL 2024. 6. 19. 15:30

두개의 값이 주어졌을 때 , 서로 값을 바꾸는 것을 swap 이라고 한다.

 

 

방법 1) 포인터를 이용하는 방식이다.

#include <iostream>

void MySwapPrt(int* a, int* b);

int main(void){
  int x = 10;
  int y = 5;
  
  std::cout << "before:" << x << " " << y << '\n';
  //x == 10 , y == 5
  
  MySwapPtr(&x, &y);
  
  std::cout << "after:" << x << " " << y << '\n';
  //x == 5 , y == 10
  
  return 0;
}

void MySwapPtr(int* a, int* b){
  int temp = *a;
  *a = *b;
  *b = temp;
}

 

 

 

방법 2) 포인터 대신 & 를 이용하는 방법도 있다. 이 방법을 사용하면 *를 사용하지 않아 보기에 깔끔해 보인다.

#include <iostream>

void MySwapRef(int &a, int &b);

int main(void){
  int x = 10;
  int y = 5;
  
  std::cout << "before:" << x << " " << y << '\n';
  //x == 10 , y == 5
  
  MySwapPtr(x, y);
  
  std::cout << "after:" << x << " " << y << '\n';
  //x == 5 , y== 10
  
  return 0;
}

void MySwapPtr(int &a, int &b){
  int temp = a;
  a = b;
  b = temp;
}

 

 

방법 3) swap 을 할 때 반드시 temp 를 사용해야 한다고 생각했는데, 아니었다. 사칙연산을 이용하면 temp를 사용하지 않고도 가능하다.

#include <iostream>

int main(void) {
  int x = 10;
  int y = 5;

  std::cout << "before:" << x << " " << y << '\n';

  // 덧셈, 뺄셈 이용
  x = x + y;  // x == 15
  y = x - y;  // y == 10
  x = x - y;  // x == 5

  // 곱셈, 나눗셈 이용
  x = x * y;  // x == 50
  y = x / y;  // y == 10
  x = x / y;  // x == 5

  std::cout << "after:" << x << " " << y << '\n';

  return 0;
}

'DataStructure' 카테고리의 다른 글

BinarySearch (이진탐색)  (0) 2024.06.25
SequentialSearch (순차 탐색)  (0) 2024.06.22
InsertionSort (삽입 정렬)  (0) 2024.06.20
BubbleSort (버블정렬)  (0) 2024.06.19
SelectionSort (선택 정렬)  (0) 2024.06.19