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

时间:2022-05-25 00:36:55

两数交换最常用的方法

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