class UP {
public:
ย ย bool operator()(int a, int b) {
ย ย ย ย return (a > b ? true : false);
ย ย }
};
class DOWN {
public:
ย ย bool operator()(int a, int b) {
ย ย ย ย return (a < b ? true : false);
ย ย }
};
template <class T>
void simple_sort(int* arr, int n, T cmp) {
ย ย for (int i = 0; i < n - 1; i++) {
ย ย ย ย for (int j = i + 1; j < 5; j++) {
ย ย ย ย ย ย if (cmp(arr[i], arr[j]))
ย ย ย ย ย ย ย ย arr[i] ^= arr[j] ^= arr[i] ^= arr[j];
ย ย ย ย }
ย ย }
}
void sort_print(int* arr, int n) {
ย ย for (int i = 0; i < 5; i++)
ย ย ย ย cout << arr[i] << " ";
ย ย cout << endl;
}
int main(void) {
ย ย int arr[5] = { 10, 5, 41, 100, 2 };
ย ย DOWN down;
ย ย UP up;
ย ย simple_sort(arr, 5, down);
ย ย sort_print(arr, 5);
ย ย simple_sort(arr, 5, up);
ย ย sort_print(arr, 5);
ย ย return 0;
return 0;
}
์ฌ๊ธฐ์ simple_sortํจ์์ย arr[i] ^= arr[j] ^= arr[i] ^= arr[j];๋ถ๋ถ์ด ์ดํด๊ฐ ์๋ฉ๋๋ค
^= ์ฐ์ฐ์๊ฐ XOR์ธ ๊ฑด ์๊ฒ ๋๋ฐ, ์ด๊ฑธ๋ก ์ด๋ป๊ฒ ์ค์์ด ๋๋์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ฌธํ์ด๋ ์กฐ์ธ ๋ถํ๋๋ฆฝ๋๋ค
xor ์ค์ ์๊ณ ๋ฆฌ์ฆ
๊ฐ์ฌํฉ๋๋ค ํ๋...
https://velog.io/@ltnscp9028/๋นํธ-์ฐ์ฐ-ํ ํฌ๋-1.-swap
์ฌ๊ธฐ๋ด๋
๋๊ณ ๊ฒ์ํด๋ ๋๊ณ . ์์ ๋ฉ๋ชจ๋ฆฌ ์ถ๊ฐ๋ก ์ฌ์ฉํ์ง ์์ผ๋ฉด์ ์ค์ํ๋ ํ ํฌ๋์ด๋ผ๊ณ ํจ
์ถ๊ฐ์ ์ธ ์ดํด์ ๋์๋์์ต๋๋ค ๊ฐ์ฌํฉ๋๋ค!
xor ์ฐ์ฐ์์ ํน์ง์ธ๋ฐ, a๋ b๋ฅผ xorํ ๊ฒฐ๊ณผ๊ฐ c ๋ผ ํ๋ฉด c์๋ค a๋ฅผ xorํ๋ฉด b๊ฐ ๋์ค๋๊ฑธ ์ด์ฉํ ๊ฒ ๊ฐ์.
๊ทธ๋ฐ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
์๋ฒจ ๊ทธ๋ฃน?์ ์ ์๋ผ๊ณค ํ๋๋ฐ ๋ชจ๋ฅด๊ฒ ๊ณ 4๋ฒ์น ๋ค ํ์ฉํ๊ฑด ์ดํดํ์ต๋๋ค ใ ใ