今天写程序的时候回想起曾经好像在那见过没有使用中间变量进行两个整数的交换,马马虎虎地记得那时通过加减法来实现的,所以就查了一下资料,果然存在这这种方法,代码如下:
void swap1 (int& x,int& y)
{
x=x+y;
y=x-y;
x=x-y;
}
void swap2 (int &x,int &y)
{
x=x-y;
y=x+y;
x=y-x;
}
通过查找资料发现还有一种方法交换两个整数的方法,同样也是不使用中间变量,使用使用异或操作(相同位为0,不同位为1),代码如下:
void swap3 (int& x,int& y)
{
x ^= y;
y ^= x;
x ^= y;
}
讨论了以上不同的情况的代码,下面将上述代码进行整理,使代码的跟完美:
void swap4 (int &x,int &y)
{
if(x==y)
return ;
if((x>0&&y>0)||(x<0&&y<0))
{
x=x-y;
y=x+y;
x=y-x;
}
else
{
x=x+y;
y=x-y;
x=x-y;
}
}
void swap5 (int &x,int &y)
{
if(x==y)
<span style="white-space:pre"> </span>return;
x^=y;
y^=x;
x^=y;
}