鱼C论坛

 找回密码
 立即注册

不用第中间变量实现两数交换【自己写的】

热度 7已有 818 次阅读2013-7-5 12:22 |个人分类:小算法

一般情况下我们要实现a和b交换都是使用一个中间变量交换 比如a=7 b=6  我们一般会使用一个零时变量temp来实现 temp=a;a=b;b=temp;这样来实现数据的交换,在这里我发现了一个不需要中间变量就完成数据交换的方法。
 if (a>b)
 {
  b=a-b;
  a=a-b;
  b=a+b;
 }
 else
 {
  a=b-a;
  b=b-a;
  a=b+a;
 }


简化一点:
a=a+b;
b=a-b;
a=a-b;

 这样同样的可以实现两个数的交换,但这样的做法并不提倡。定义零时变量固然会占内存,但是现在的内存足够大了而且如果定义在一些子函数内temp是存储在栈内的。用完就会释放。这样做就加大了对cpu的工作量因为这里要判断而且不断的加法减法赋值等操作效率是底下的。这里只做为一种思路一种方法,也许以后在某些方面就要借鉴它也说不准。
如果有错指正哈。咱长的也不像数学家,反正思路是这样。
5

路过

鸡蛋

鲜花

握手

雷人

刚表态过的朋友 (5 人)

发表评论 评论 (6 个评论)

回复 lsyjh 2013-7-7 09:43
有没有想过数足够大的情况啊?
回复 思无邪 2013-7-7 11:28
a = ( a + b ) - (b = a)
试试
回复 思无邪 2013-7-7 11:30
还有一种是用运算符  ^ 弄的你找找看
回复 Crazy迷恋. 2013-7-7 20:57
lsyjh: 有没有想过数足够大的情况啊?
你的意思是溢出的情况?也确实会有。这个只是数学上的一种思路。真正去运用的比较少。
回复 Crazy迷恋. 2013-7-7 21:02
思无邪: 还有一种是用运算符  ^ 弄的你找找看
位运算的效率特别高。
回复 Crazy迷恋. 2013-7-7 21:07
思无邪: a = ( a + b ) - (b = a)
试试
  

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 01:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部