方法一
利用临时变量来交换
void swap(int *x1,int *x2){
int temp=*x1;
*x2=*x1;
*x1=temp;
}
优点:稳妥
缺点:用了临时变量,占用了空间
方法二
利用加法(或减法)来交换,也可以用乘法来实现,但是除法不行(除法可能会产生小数,小数转整型会导致数值丢失)
void swap(int *x1,int *x2){
*x1=*x1+*x2;
*x2=*x1-*x2;
*x1=*x1-*x2;
}
优点:不用额外空间
缺点:1、会有数值过大造成溢出的风险
2、当x1,x2指向同一内存空间时,返回的 *x1==*x2==0(可以自行推导下为什么)
方法三
利用位运算(异或^)来交换
void swap(int *x1,int *x2){
*x1=*x1^*x2;
*x2=*x1^*x2;
*x1=*x1^*x2;
}
优点:位运算计算效率高,数值不会溢出,也不占用额外空间
缺点:当x1于x2指向同一内存空间时,返回的 *x1==*x2&