本文主要介绍三种数值型数据交换方法间的比较:
比如要交换的数据分别为a和b
1、方法一:
通过添加一个中间值的方式来交换,
代码如下:a和b为整型数据,定义一个中间的整型数值temp,
temp = a;
a = b;
b = temp;
2、方法二:#define SWAP(a,b) (a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b);
该方法需要考虑到数值的溢出,因为a与b相加可能会照成a的值超出其范围
3、方法三:#define SWAP(a,b) (a)=(a)^(b);(b)=(a)^(b);(a)=(a)^(b);
该方法的缺点是理解比较麻烦。
在空间方面,方法二和方法三的空间开销低于方法一的
而在时间方面,本文使用以下代码来进行验证:
#include
#include
#include
#define NUM 10000
#define SWAP1(x,y) (x)=(x)+(y);(y)=(x)-(y);(x)=(x)-(y);
#define SWAP2(x,y) (x)=(x)^(y);(y)=(x)^(y);(x)=(x)^(y);
void maopao1(void);
void maopao2(void);
void maopao3(void);
void maopao4(void);
void maopao5(void);
void maopao6(void);
int a[NUM];
int main()
{
int i = 0;
int time_t1 = 0;
int time_t2 = 0;
for(i=0;i
a[j]){
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
void maopao2(void)
{
int i = 0, j = 0;
int temp = 0;
for(i=0;i<(NUM-1);i++){
for(j=i+1;j
a[j]){ SWAP1(a[i],a[j]); } } } } void maopao4(void) { int i = 0, j = 0; int temp = 0; for(i=0;i<(NUM-1);i++){ for(j=i+1;j
a[j]){ SWAP2(a[i],a[j]); } } } } void maopao6(void) { int i = 0, j = 0; int temp = 0; for(i=0;i<(NUM-1);i++){ for(j=i+1;j
运行结果:
the time of one is 2902
the time of second is 4571
the time of second is 3619
可以发现,方法一的时间开销是最小的,方法三次之,方法二是最大的。
综合上述可以发现:
如果单纯地考虑时间开销,方法一是最合适的;
如果单纯地考虑空间开销,方法二和方法三均优于方法一;
如果综合地考虑时间和空间这两者的开销,方法三是最优的。