常见的交换两个变量值的方法有三种:
-
最常见的一种方法,利用临时变量,交换两个变量的值。这种方法在生活中也很常见,假设有一个杯子A,其中有盛有饮料a,另有一个杯子B,其中盛有饮料b,如果我们想要把A和B两个杯子里的饮料对调,会借助一个空杯子C,先把A中的饮料a倒在空杯子C中,C中有了饮料a,于是A变成了空杯子,这时把B中的饮料b倒在A中,于是A中有了饮料b,B成了空杯子,最后将C中的饮料a倒在B中,B中有了饮料a,此时完成对调。
-
第二种方法,利用数值异或运算两次不变的性质,交换两个变量值。
-
第三种方法,利用两数之和减去一个数等于另一个数的性质,交换两个变量值。例如,10+1=11,10在前,1在后,通过11-10=1与11-1=10的变换后,1在前,10在后,两数完成交换。这种方法可能会造成数值溢出,比如两个绝对值较大的负数交换时,因此常规编程中不采用。
C语言的代码实现:
#include <stdio.h>
#include <time.h>
// 两种方法循环十亿次
#define N 1000000000
// 异或运算交换
void swap_a(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
// 辅助变量交换
void swap_b(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void show_a()
{
int a = 1, b = 2;
clock_t begin, end;
begin = clock();
for (int i = 0; i < N; i++)
{
swap_a(&a, &b);
}
end = clock();
printf("time a:%lfs
", (double)(end - begin) / CLOCKS_PER_SEC);
}
void show_b()
{
int a = 1, b = 2;
clock_t begin, end;
begin = clock();
for (int i = 0; i < N; i++)
{
swap_b(&a, &b);
}
end = clock();
printf("time b:%lfs
", (double)(end - begin) / CLOCKS_PER_SEC);
}
int main()
{
show_a();
show_b();
return 0;
}
输出结果:
time a:17.846000s
time b:8.940000s
输出结果证明,利用辅助变量进行值的交换,运算效率最高,而此种方法也最常用,可读性也最高。
如文章内容有错误,欢迎在评论中指正