数学建模社区-数学中国
标题:
[讨论]简单精妙的算法
[打印本页]
作者:
ytumath
时间:
2005-4-24 11:25
标题:
[讨论]简单精妙的算法
<
><FONT face=Tahoma size=4></FONT> </P>
* s& Y0 A# }( e
<
><FONT face=Tahoma size=4></FONT> </P>
- q2 Z. _, r: U# }2 ]
<
><FONT face=Tahoma size=4>如何实现俩变量a,b交换?
8 e5 T% l9 F# M) C0 Y8 @1 v* m
0 V; B' |$ B P `8 s, K
是个人都能想到:
* {% P4 h, m, S
# m$ c: ]/ a$ L: x& f
tmp=a;
8 `, L- i2 @; w) ]& i- }- h
a=b;
" g1 ` n5 l2 J, y4 K6 l# H
b=tmp;
+ _9 ^- @' z9 G) x" L" Z @- w0 D
+ o. ], }9 m J( s
俺看到一个牛叉的算法......
3 Y6 H- x+ P0 g/ s9 |
/ M$ M8 l. e% Y/ k: x! p g3 j
a=a+b;
$ A4 m# a7 g0 l" C8 z; V/ A& n
b=a-b;
8 x& M; f* I) ]8 I G
a=a-b;
; u4 q3 m$ ~. t
9 y9 X- L# E4 N7 ?0 U9 l# x' \* t6 g
牛吧...还有更牛的...嵌汇编,嵌汇编......
( w3 E0 O1 n$ o3 |* Q" b
8 I0 C7 s1 w1 M
asm{
0 D, S5 E8 @: y0 P: I- y2 A" ^9 L' n
push eax;
8 N" ^" j( R8 [! f; _& o, M
mov eax,a;
* S. I! h) D1 @; e9 d7 e' J4 g
push eax
, d+ D" f9 O5 X& J
mov eax,b;
/ L# X) B) F3 }: x
mov a,ebx
% F; w7 @% m. F) V* L
pop eax
: z, W: U) |5 W2 N
mov b,eax
/ `# N$ J) i+ e: d! G/ U2 G
pop eax
/ D! M$ R5 D# k" I5 m' R
}
9 g0 @6 ? g+ x% u/ F" n6 [
# d5 r5 V8 F) p+ i. U
代码的优化是无止境的.........</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>
2 C# f9 v* ^- o9 I: u2 X) O
<
>在汇编当中交换两个数需要这么麻烦吗?</P>
: `- \" G7 Y n3 o
<
>难道仅用 xchg a,b 一条命令不更好吗?!何必要写的那么冗长复杂又难理解呢?!</P>
作者:
johhan
时间:
2005-8-6 10:57
<
><FONT size=4>a=a+b;<BR>b=a-b;<BR>a=a-b;</FONT></P>
& B; ] t4 Q4 x( j
<
><FONT size=4></FONT> </P>
( P( T0 b4 l: q7 f n) `- X
<
><FONT size=4>高明</FONT></P>
作者:
cshdzxjtu
时间:
2005-8-13 12:32
换一种思路罢了
作者:
jys
时间:
2005-8-19 20:24
<
>a ^= b;</P>
; B+ f% x. D- C6 V
<
>b ^= a;</P>
9 d7 K9 ?; }( _6 L
<
>a ^= b;</P>
作者:
jlin0528
时间:
2005-8-24 14:46
新思路,不错,给人眼前一亮的感觉。
作者:
cupidvenus
时间:
2005-9-23 13:51
<
>早就知道了,还有很多</P>
作者:
zxl_lucky
时间:
2005-9-24 14:50
haixing
作者:
shease
时间:
2005-9-28 19:30
<
>heihei</P>
作者:
hao1133
时间:
2005-9-29 12:06
精彩,各有千秋
作者:
myzrl20
时间:
2005-10-15 13:57
<
>都学总比没学、没见过好多了</P>
作者:
nonregister
时间:
2005-11-3 18:40
<
>第二种,曾经汇编嵌入过。</P>
/ \/ Q; o3 U$ G2 x
<
>但第一种没想到过,但也不见得效率一定高,增加了加减运算。</P>
作者:
surbian
时间:
2006-2-16 09:34
好文,好思想
作者:
hover_yinxiang
时间:
2006-2-16 11:37
<p>有想法</p>
作者:
daomeidan1234
时间:
2006-3-8 12:34
小游戏, 小Trick, 在弄几个有意思的看看.
作者:
richard_li_1
时间:
2006-3-11 17:35
也可以使用 异或 的方法实现,RAID5就是采用这个原理,用加的方法容易产生溢出<br/>A=A xor B<br/>B=B xor A<br/>A=B xor A<br/>
作者:
avajing
时间:
2006-4-14 21:30
<p>good idea</p>
作者:
comeononon
时间:
2006-4-26 09:20
第一种算法精彩
作者:
zansan
时间:
2006-5-7 17:24
"C程序设计"里有.
作者:
chz0829
时间:
2006-6-1 19:17
<p>都很牛</p><p></p>
作者:
可dofsdfo
时间:
2006-6-11 00:32
<p>请问 使用汇编的时候为什么不用</p><p>xchg 指令 该指令的周期是2</p>
作者:
xjtu_yu
时间:
2006-6-20 14:13
哈哈,不错不错
作者:
zhoyi
时间:
2007-6-14 14:54
呵呵。有意思。
作者:
317423892
时间:
2007-10-21 08:13
hao a
作者:
hanjinheng
时间:
2007-10-21 09:29
怎么不牛啊,人家就用了两变量。
作者:
GraBUAA
时间:
2012-4-2 16:54
我是在是看不出来牛在哪,这不是很绕吗,现在计算机分配各变量一点影响都没有吧,又不是单片机~~~~~
作者:
wpa
时间:
2012-4-5 01:24
减少了一个内存变量的使用
作者:
shuxue_liu
时间:
2012-4-5 09:29
Oooooooooooooooo
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5