swap的实现(没有中间变量)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swap的实现(没有中间变量)相关的知识,希望对你有一定的参考价值。

两数交换最常用的方法

void swap(int &a,int &b)

{

     int temp=a;

     a=b;

     b=temp;

}

如果没有中间变量temp可以使用呢,还有其他的三种方法

第一种之加减法实现:

void swap1(int &a,int &b)

{

       a=a+b;

       b=a-b;

       a=a-b;

}

缺点:在进行浮点数的交换时可能会造成精度的损失。

第二种之乘除法实现:

void swap2(int &a,int &b)

{

      a=a*b;

      b=a/b;

      a=a/b;

}

缺点:也存在浮点数时精度损失的问题,而且要加约束条件a!=0&&b!=0;

第三种之异或实现

void swap3(int &a,int &b)

{

      a^=b;//a的值为a^b

      b^=a;//b=b^a=b^(a^b)=a^(b^b)=a^0=a

      a^=b;//a=a^b=(a^b)^a=(a^a)^b=0^b=b

}

缺点:只能对整型数据进行交换不能对浮点型数据进行交换。

其实现主要是基于异或运算的如下性质:

1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0

2.任意一个变量X与0进行异或运算,结果不变,即X^0=X

3.异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)

4.异或运算具有可交换性,即a^b=b^a

 

以上是关于swap的实现(没有中间变量)的主要内容,如果未能解决你的问题,请参考以下文章

关于swap交换操作的新方法

不使用中间变量交换两数

实现两个变量的值交换的三种方法(两种方法不使用中间变量)

不用中间变量实现两个数的替换

我如何从用户那里接收字符串并将其分配到没有任何中间变量的指针数组中?

0091 交换两个变量的值( 实现思路:使用一个 临时变量 用来做中间存储 )