算法题汇总

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

原文地址:https://www.cnblogs.com/heartchord/p/algorithm.html