变量交换的几种常见方法.docx
《变量交换的几种常见方法.docx》由会员分享,可在线阅读,更多相关《变量交换的几种常见方法.docx(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、变量交换的几种常见方法前几天发现了一个问题:有人告诉我,要进行变量交换,就必须 引入第三变量!假设我们要交换a和b变量的值,如果写成int a = 5zb=10;a二b;b=a;那么结果就是两个都是10 ,理由不言而喻。所以就应该引入第三变量,在a的值被覆盖之前就把a的值保留好。int a = 5zb=10ztmp;tmp=a;a = b;b=tmp;这样,就要引入了第三个变量,然而,我们能不能不引入第三变量来实现变量交换 呢?答案自然是肯定的,首先我们可以这样设想,如果a的值被覆盖了,那么就没法知道 b应该放什么值了,所以,我们要保留a的值,因此我们可以把a和b的值合起来,放在a里,再把合
2、起来的值分开,分别放到b和a中:int a = 5,b=10;a=a+b; /a=15,b=10b=a-b; /a = 15,b=5a=a-b; /a=10,b=5但是这样做有一个缺陷,假设它运行在vc6环境中,那么int的大小是4 Bytes ,所 以int变量所存放的最大值是2A31-1即2147483647 ,如果我们令a的值为 2147483000 , b的值为1000000000 ,那么a和b相力口就越界了。事实上,从实际的运行统计上看,我们发现要交换的两个变量,是同号的概率很大, 而且,他们之间相减,越界的情况也很少,因此我们可以把上面的加减法互换,这样使得 程序出错的概率减少:i
3、nt a = 5,b=10;a-=b; /a=-5,b=10b+=a; /a=15,b=5a+ = b; /a=10,b=5通过以上运算,a和b中的值就进行了交换。表面上看起来很简单,但是不容易想 到,尤其是在习惯引入第三变量的算法之后。它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。具体过程:第一句a-二b求出ab两点的距离,并且将其保存在a中;第二句 “b+二a求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存 在b中;第三句a+=b求出b到原点的距离(a到原点距离与ab两点距离之和), 并且将其保存在a中。完成交换。此算法与引入第三变量的算法相比,多了三
4、个计算的过程,但是没有借助临时变量, 因此我们称之为算术交换算法。因外上面的算术交换算法有导致变量溢出的危险,所以我们再想办法引入一个逻辑运 算位异或,也能得到交换效果,而且不会导致溢出。位异或运算符是人,它的作用是按照每个位进行异或运算,异或运算有一个特通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任 意一个给定的值连续异或两次,值不变。即:aAbAb=ao将a=aAb代入b=aAb则得 b=abAb二a洞理可以得到 a=bAaAa=b;如存在c=a人b;这种关系后,任意给出两个变量进行位异或运算,都能得到剩下的第 三个变量:a = bAc;b=aAc;c=aAb;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 变量 交换 常见 方法
限制150内