ytumath 发表于 2005-4-24 11:25

[讨论]简单精妙的算法

<P><FONT face=Tahoma size=4></FONT> </P>
<P><FONT face=Tahoma size=4></FONT> </P>
<P><FONT face=Tahoma size=4>如何实现俩变量a,b交换?

是个人都能想到:

tmp=a;
a=b;
b=tmp;

俺看到一个牛叉的算法......

a=a+b;
b=a-b;
a=a-b;

牛吧...还有更牛的...嵌汇编,嵌汇编......

asm{
push eax;
mov eax,a;
push eax
mov eax,b;
mov a,ebx
pop eax
mov b,eax
pop eax
}

代码的优化是无止境的.........</FONT></P>

iyah1984 发表于 2005-4-24 12:00

还不 是第一种的最简单明了。而且这只是传值调用。而且是传地址调用

happy_cser 发表于 2005-4-25 17:05

同意楼上的,不觉得后面两个有什么好的啊

tw1982 发表于 2005-5-12 20:12

会用一般的就可以了吗,后面的代码算法又不比第一个快,,

wyf287 发表于 2005-7-24 02:10

有必要弄那么复杂吗

ayue 发表于 2005-7-27 14:46

<DIV class=quote><B>以下是引用<I>ytumath</I>在2005-4-24 11:25:30的发言:</B><FONT face=Tahoma size=4><BR><BR>牛吧...还有更牛的...嵌汇编,嵌汇编......<BR><BR>asm{<BR>push eax;<BR>mov eax,a;<BR>push eax<BR>mov eax,b;<BR>mov a,ebx<BR>pop eax<BR>mov b,eax<BR>pop eax<BR>}</FONT></DIV>
<P>在汇编当中交换两个数需要这么麻烦吗?</P>
<P>难道仅用 xchg a,b 一条命令不更好吗?!何必要写的那么冗长复杂又难理解呢?!</P>

johhan 发表于 2005-8-6 10:57

<P><FONT size=4>a=a+b;<BR>b=a-b;<BR>a=a-b;</FONT></P>
<P><FONT size=4></FONT> </P>
<P><FONT size=4>高明</FONT></P>

cshdzxjtu 发表于 2005-8-13 12:32

换一种思路罢了

jys 发表于 2005-8-19 20:24

<P>a ^= b;</P>
<P>b ^= a;</P>
<P>a ^= b;</P>

jlin0528 发表于 2005-8-24 14:46

新思路,不错,给人眼前一亮的感觉。
页: [1] 2 3 4
查看完整版本: [讨论]简单精妙的算法