使用异或对两个元素进行交换。这种方法不需要额外的空间,可以实现原地交换。但是这种方法易读性很差,对于代码的维护来说很不好。
例如交换a和b
a = a ^ b;
b = b ^ a;
a = a ^ b;
这是为什么呢?为了方便解释,我们将上面的代码写作数学表达式
a1 = a ^ b;
b1 = b ^ a1 = b ^ (a ^ b) = a;
a2 = a1 ^ b1 = a ^ b ^ a = b;
这里用到了异或运算的结合律和交换律。
使用异或对两个元素进行交换。这种方法不需要额外的空间,可以实现原地交换。但是这种方法易读性很差,对于代码的维护来说很不好。
例如交换a和b
a = a ^ b;
b = b ^ a;
a = a ^ b;
这是为什么呢?为了方便解释,我们将上面的代码写作数学表达式
a1 = a ^ b;
b1 = b ^ a1 = b ^ (a ^ b) = a;
a2 = a1 ^ b1 = a ^ b ^ a = b;
这里用到了异或运算的结合律和交换律。