标签:
1.借助中间量交换
通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下:
int x = 10; int y = 20; int temp = x; x = y; y = temp;
这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。
上面的算法最大的缺点就是需要借助一个临时变量。那么不借助临时变量可以实现交换吗?答案是肯定的!
2.数值相加减交换
int a = 10; int b = 12; a = b - a; //a=2;b=12 b = b - a; //a=2;b=10 a = b + a; //a=10;b=10
3.位移运算交换
int a = 10; int b = 12; //a=1010^b=1100; a = a ^ b; //a=0110^b=1100; b = a ^ b; //a=0110^b=1010; a = a ^ b; //a=1100=12;b=1010;
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
4.利用语法特性交换
int a = 10; int b = 12; a = b + 0 * ( b = a);//a=12;b=10
此方法精简,一行代码搞定,但是这种写法是不推荐的,不同的编译器,可能会出现不同的结果。
5.对于字符\串类型的交换
String s1 = "111"; String s2 = "222"; s1 = s1 + "," + s2; s2 = s1; s1 = s1.split(",")[1];//s1="222" s2 = s2.split(",")[0];//s2="111"
不解释。
标签:
原文地址:http://www.cnblogs.com/zoe15/p/5350522.html