C语言 最快的两数交换

来源:互联网 发布:哪个软件可以租到豪车 编辑:程序博客网 时间:2024/05/16 12:47

搬运自:http://hi.baidu.com/evergreen19/blog/item/dbc1d5f13241c3a5a50f5245.html



最近开始写,RC4,由于要使用不少的swap,所以swap的算法效率对RC4的整体速度是有着不小的影响的,因此总结了一些不错的交换算法与大家共享。



int a=5,b=7;


方法一:   内联汇编,利用堆栈区 -- Swapping containers

__asm{

       push a

       push b

       pop a

       pop b

    }

  

方法二:使用异或运算

a = a^b;

b = a^b;

a = a^b;

或写成:

a^=b;

b^=a;

a^=b;


方法三:加法交换

a = a+b;

b = a-b;

a = a-b;


方法二和三原理相同:

利用反函数的性质,函数 c=f(a, b),必须存在反函数,a = g(c, b);

这样,可以用

a = f(a, b);

b = g(a, b);

a = g(a, b);

三步交换两个数


方法四:利用XCHG 指令--- 使用专用指令(Dedicated instructions

__asm{

       mov eax,a

       xchg eax,b

       mov a,eax

    }

不过需要使用寄存器的大小,如:

116CPU所含有的数据寄存器有: (AXBXCXDX)

2 32CPU所含有的数据寄存器有:(EAXEBXECXEDX)