不使用第三方变量交换变量的值

变量的重新定义和赋值是要占用内存的,所以尽可能少的变量来完成计算是最理想的事情,通常我们的做法是 :

    定义一个新的变量,借助它完成交换。代码如下: 

标准算法:

 

int a=10int 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;轻松完成交换。

     以上三个算法均实现了不借助其他变量来完成两个变量值的交换,

   介绍这三种算法并不是要应用到实践当中,而是为了探讨技术,展示程序设计的魅力。从中可以看出,数学中的小技巧对程序设计而言具有相当的影响力,运用得当会有意想不到的神奇效果。而从实际的软件开发看,标准算法无疑是最好的,能够解决任意类型的交换问题。

 

 

posted @ 2013-09-04 15:10  Flying_Boy  阅读(1041)  评论(0编辑  收藏  举报