在编程的过程中经常会遇到将两个数交换,特别是在排序的时候。一般的实现两个数的交换都要使用中间变量如下:
void inline swap(int &a,int &b) { int tmp ; tmp=a ; a=b ; b=tmp ; }
注意:这里要使用引用传参或者指针传参,如果写成swap(int a, int b)就错了,这里就不用解释了!
这个过程中使用了中间变量,当然就不满足要求了。
网上搜索了一下,一般有一下两种方法:
void inline swap(int &a,int &b) { a=a+b ; b=a-b ; a=a-b ; }
void inline swap(int &a,int &b) { a=a^b ; b=a^b ; a=a^b ; }
这两种方法都可以实现两个不同的数的交换,第一种方法有可能出现相加溢出的问题,但是当两个数相同的时候,就会出现问题。因此在函数加入判断语句就OK了,如下:
void inline swap(int &a,int &b) { if(a==b) { return ; } a=a^b ; b=a^b ; a=a^b ; }