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;
}