[讨论]简单精妙的算法
<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> 还不 是第一种的最简单明了。而且这只是传值调用。而且是传地址调用 同意楼上的,不觉得后面两个有什么好的啊 会用一般的就可以了吗,后面的代码算法又不比第一个快,, 有必要弄那么复杂吗 <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> <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> 换一种思路罢了 <P>a ^= b;</P>
<P>b ^= a;</P>
<P>a ^= b;</P> 新思路,不错,给人眼前一亮的感觉。