记录哪个方法更普适,更高效,这些方法不包括使用函数的方法,如果使用函数的话,使用指针的方法更合适。
- 使用中间变量
形如 int tmp, tmp = a; a=b; b = tmp;
1 #define SWAP(a, b) {typeof(a) _t=a; a=b; b=_t;}
通杀,唯一缺点是需要额外的堆栈空间。
- 使用算术方法
1 #define SWAP(x, y) (x) = (x)+(y); (y) = (x)-(y);(x) = (x)-(y);
不能使用,x+y会有可能导致数据溢出,那么就玩完了,且只能对基本数据类型操作,构造数据类型不能使用。
- 费脑异或法
1 #define SWAP(x, y) (x)^=(y); (y)^=(x);(x)^=(y);
费脑,且只能对基本数据类型操作,构造数据类型不能使用。
那么对比1,3的效率,分别使用2个宏运行如下代码:
int main(int argc, const char *argv[]) { unsigned int k = 0xFFFFFFF; int a = 5; int b = 10; while ( k-- ) { SWAP(a, b); } return 0; }
使用 time ./main 计时,异或法耗时2.2-2.4s, 中间变量法耗时0.7-0.8s,效率提高了3倍。
时间: 2024-11-04 09:15:48