交换--Swap

2016-12-19 19:57:02来源:CSDN作者:qq_34724211人点击

第七城市

交换
题目:给定两个整形变量的值,将两个值的内容进行交换。
思路:创建一个临时变量,交换两个数的内容
代码实现:

void Swap(int *pa,int *pb){    int tmp = *pa;    *pa = *pb;    *pb = tmp;}

如果要求不能创建临时变量,来交换两个数。
思路:把两个数用数学方法交换。
eg:
(1)加减法。(a=1,b=2)
a=a+b; “a(1)+b(2)”的和(3)赋给a.
b=a-b; “和(3)-b(2)”的差(1)赋给b.——b=1
a=a-b; “和(3)-b(1)”的差(2)赋给a.——-a=2
代码实现:

void Swap(int *pa,int *pb){    *pa = *pa + *pb;    *pb = *pa - *pb;    *pa = *pa - *pb;}

(2)乘除法。 (同加减法)
a = a*b;
b = a/b;
a = a/b;
代码实现:

void Swap(int *pa,int *pb){    *pa = *pa * *pb;    *pb = *pa/ *pb;    *pa = *pa/ *pb; }

(3)异或。(a=1(0001),b=(0010))省略前28个0
a = a^b; 0001^0010=0011
b = a^b; 0011^0010=0001——-b=0001
a = a^b; 0011^0001=0010——-a=0010
它们虽不用开辟空间,但有弊端,如果这两个数较大的话,两数相加会溢出,则不安全,乘除法亦相同。
异或,如果你传了同一个数(同一个地址)异或就会出错,当然不会去交换同一个数,但是为了代码的严谨性,在异或前应先判断是否时同一个地址

void Swap(int *pa,int *pb){    if(pa==pb)        return;    *pa = *pa^ *pb;    *pb = *pa^ *pb;    *pa = *pa^ *pb;}

我在VS2010编译器
如果有误,希望指出

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台