1、普通的方法,使用一个中间变量temp,可以使用引用
void swap(int &a,int &b){
int temp;
temp = a;
a = b;
b = temp;
}
2、 普通的方法,使用一个中间变量temp,可以使用指针
void swap(int *a,int *b){
int temp;
temp = *a;
*a = *b;
*b = temp;
}
3、不使用中间变量,使用异或的方法,只适用于整型变量,不适用于浮点型
void swap(int a,int b){
a = a^b;
b = b^a;
a = a^b;//以上三句话等价于 a^=b^=a^=b;
}
JAVA实现:public class SwapTest {
public static void main(String[] args){
int a = 2;
int b = 4;
a = a^b;
b = b^a;
a = a^b;
System.out.println(a);
System.out.println(b);
}
}//输出结果为:4
2
4、不使用中间变量,使用加减的方法
void swap(int *a,int *b){
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;//以上三句等于 *a = *a + *b - (*a -*b);
}
5、不使用中间变量,使用乘除的方法
void swap(int a ,int b){
a = a*b;
b = a/b;
a = a/b;
}
总结:
1)加减法、乘除法、异或法
2)使用中间变量(指针、引用)
3)当要求不使用指针,并且不使用中间变量时,只能使用异或法
4)当是浮点数时,不能使用异或法
5)当b为0时,不能使用乘除法
6)不使用中间变量,如何交换三个数??
void swap(int &a,int &b){
a ^= b;
b ^= a;
a ^= b;
}
int main(){
int a=1;b=2;c=3;
swap(a,b);
swap(b,c);
printf(...);
return 0;
}