1. Python 的方式
a, b = b, a
2. 异或(避免中间变量的定义)
(a⊕b)⊕a=b(a⊕b)⊕b=a
(
a
⊕
b
)
⊕
a
=
b
(
a
⊕
b
)
⊕
b
=
a
void swap(int &a, int &b) {
a = a^b;
b = a^b;
a = a^b;
}
当然利用C 语言的左值特性,还可进一步将其简化为:
void swap(int &a, int &b) {
a ^= b ^= a ^= b;
// b ^= a ^= b ^= a;
}
void swap(int *a, int *b) {
*a ^= *b ^= *a ^= *b;
}
- a ^= b:a = a^b
- b ^= a ^= b:
- 此时的 a 已经通过第一步,变为了 a^b(这里的 a 为原始的 a)
- 则 b^ (a^ b) = a,
- 顺利将 a 赋值到 b 的位置;
- a ^= b ^= a ^= b:
- 此时的 a 仍为 a^b
- 此时的 b 已为 a
- 则 a ^b ⇒ (a^b) ^ a ⇒ b