不使用第三方变量交换变量的值
变量的重新定义和赋值是要占用内存的,所以尽可能少的变量来完成计算是最理想的事情,通常我们的做法是 :
定义一个新的变量,借助它完成交换。代码如下:
标准算法:
int a=10; int b=20; int t=a; a=b; b=t;
这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。
添加临时变量不可避免的造成内存的占用,有没有不通过临时变量的方法哪,答案肯定的
方法 1
int a=10, int b=20 a=a+b; //a=30 b=20 b=a-b; //a=30 b=10 a=a-b; //a=20 b=10
这种方法的本质就是把变量 a+b 作为了临时变量来使用
方法 2
int a=10, int b=20 a=b+(b=a)*0; // b=a+(a=b)*0;
这种方法的看起来很简单,但是在习惯了传统的算法的前提下不是很容易想到的
方法 3
int a=10,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;
此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。
以上三个算法均实现了不借助其他变量来完成两个变量值的交换,
介绍这三种算法并不是要应用到实践当中,而是为了探讨技术,展示程序设计的魅力。从中可以看出,数学中的小技巧对程序设计而言具有相当的影响力,运用得当会有意想不到的神奇效果。而从实际的软件开发看,标准算法无疑是最好的,能够解决任意类型的交换问题。