交换两个变量。哪种方式更快?

时间:2015-07-18 02:33:58

标签: algorithm

我们说我们有两个整数a和b。交换价值的方式更快?

c=a;
a=b;
b=c;//(edited typo)

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

或按位xor

a=a^b;
b=a^b;
a=a^b;

我能够测试其性能差异,但我现在想知道它。是按位吗?

1 个答案:

答案 0 :(得分:1)

首先,您无法量化独立于程序语言,编译器和运行它的平台的算法速度。算法是一种数学抽象。

说完了:

  • 是一种典型的编程语言,
  • 和一个典型的编译器,
  • 典型的执行平台,

第一个版本通常更快,因为它通常会编译为更少的本机指令,执行时间周期更短。第一个版本只需要加载和保存操作。其他两个版本(至少)具有相同数量的加载和保存,以及一些额外的算术或位操作指令。

然而,即使这样也不是干涸的。

第2和第3个示例在不使用临时变量的情况下执行交换。如果使用额外的临时变量是昂贵的,那么您可能会这样做。这可能发生在没有提供足够通用寄存器的机器上,并且加载/保存到内存的相对成本很高。在某些情况下,本机代码等价物可能是最佳的。

然而......这才是真正意义上的......最好的策略是将这种决定留给编译器。除非您准备投入大量精力进行微优化,否则编译器可能会比您更好地完成工作。确实,用狡猾的方式编写代码&#34;可能会使编译器难以优化。 (例如,在第三种情况下,编译器需要弄清楚该序列实际上是在替换最佳指令序列之前交换2个变量。有可能优化器无法做到这一点。)< / p>