一、使用临时变量
C版本:
void swap(int* a, int* b) { int temp = 0; temp = *a; *a = *b;void swap(int& a, int& b){int temp = 0;temp = a;a = b;b = temp;} *b = temp; }
C++版本:
void swap(int& a, int& b) { int temp = 0; temp = a; a = b; b = temp; }
二、不使用临时变量
方法一:
void swap(int& a, int& b) { if(a == b) return; if(a > 0 && b > 0) || (a < 0 && b < 0) { a = a - b; b = b + a; a = b - a; } else { a = a + b; b = a - b; a = a - b } }
此方法需要考虑变量溢出问题。如果两数为同号,则以其“差”作为运算的中间变量;如果两数为异号,则以其“和”作为运算的中间变量。
方法二:
void swap(int& a, int& b) { if(a == b) return; a ^= b; //a与b不同的bit为1,相同为0 b ^= a; a ^= b; }
此方法记住两条原则即可理解:
任何一位二进制数同 1 异或都会变成另外一个
任何一位二进制数同 0 异或都保持不变
时间: 2024-12-22 15:37:14