方法一:中间变量
要把两个杯子里的水互换, 那么只需要找第三个杯子临时存放一下这两个杯子其中一个,
用C语言表示:
// 定义两个初始值
int a = 10;
int b = 20;
//交换
int temp = a;
a = b;
b = temp;
那么, 有没有不需要中间变量就能交换两个数的方式呢?
方法二:加减运算
// 定义两个初始值
int a = 10;
int b = 12;
// 交换两个值
a = a + b;
b = a - b;
a = a - b;
上面的代码就是利用了加减法和c语言中变量赋值的特性做到的, 这样的代码在c++, java, python及其他语言也都是可行的.
此外还有单行写法
a = a + b - (b = a);
怎么样是不是很酷炫, 热爱算法的你怎么能不搞点这种又简便, 又酷炫的写法? 别急, 下面还有更多
方法三:乘除运算
// 定义两个初始值
int a = 10;
int b = 20;
// 交换两个变量的值
a = a * b;
b = a / b;
a = a / b;
原理相同, 同样的也有单行写法
a = a * b / (b = a);
因为乘除运行时从左到右的, a*b
得到的结果再处以a
是一定可以整除的
方法四:位运算
很多位运算都可以达到这样的效果, 不过还是异或最为简单, 其他的读者可以自行探索
// 定义两个初始值
int a = 10;
int b = 20;
// 交换两个变量的值
a = a ^ b;
b = a ^ b;
a = a ^ b;
单行写法:
a = a ^ b ^ (b = a);
总结:
上述几种方法中, 原理都大差不差, 加减运算和乘除运算会更好理解, 但是要说效率最高, 那肯定是位运算