算法题汇总
1. 交换两个整型变量值,要求不定义新变量作为临时变量
• 算法一
▶ 算法实现
template <class T> void g_SwapInteger(T &a, T &b) { a = a ^ b; b = a ^ b; a = a ^ b; }
▶ 算法证明
a0 = a b0 = b
a1 = a0 ^ b0 = a ^ b b1 = b0 = b
a2 = a1 = a ^ b b2 = a1 ^ b1 = a ^ b ^ b = a
a3 = a2 ^ b2 = a ^ b ^ a = b b3 = b2 =a
• 算法二
▶ 算法实现
template <class T> void g_SwapInteger(T &a, T &b) { a = a - b; b = a + b; a = b - a; }
▶ 算法证明
a0 = a, b0 = b
a1 = a0 - b0 = a - b, b1 = b0 = b
a2 = a1 = a - b, b2 = a1 + b1 = a - b + b = a
a3 = b2 - a2 = a - (a - b) = b, b3 = b2 = a