您的位置:首页 > 其它

交换两个数的方法总结

2014-11-12 20:40 183 查看
今天总结一下交换两个数的方法,以前自己只会一种,最近在准备招聘会,分享一下自己的所获;

方法1:使用函数传址:

void swap(int *p1, int *p2)
{
int tmp;

tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}


方法二:在C++中传引用

void swap(int &x, int &y)
{
int tmp ;
tmp = x;
x = y;
y = tmp;
}


方法三:不使用中间变量

void swap(int a, int b)
{
a = a+b;
b = a-b;
a = a-b;
}


方法四:上述代码可能会产生溢出,改进为

void swap(int *p1, int *p2)
{
if(*p1 != *p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
}


其中if判断是必须的,否则当有多个数或者两个数相等时会改变原来的值。

方法五:使用宏定义1

#define SWAP(a, b) {if((a) != (b)) {(a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b);}}


方法六:使用宏定义2

#define SWAP(a, b) {if((a) != (b)) {(a) ^= (b);(b) ^= (a);(a) ^= (b);}}


#define SWAP(a, b) do{if((a) != (b)) {(a) ^= (b);(b) ^= (a);(a) ^= (b);}}while(0)


do{......}while(0)用于封装语句序列并确保正确性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: