使用c来写一个函数来实现交换两个整数。
第一种
一般的方法,引用中间变量,方便快捷。
1 void swap(int *a, int *b) 2 { 3 int tmp = *a; 4 *a = *b; 5 *b = tmp; 6 }
第二种
void swap(int *a, int *b) { int tmp = *a + *b; *b = tmp - *b; *a = tmp - *b; }
tmp虽然可能会溢出,但是依然能够达到交换的效果。
上面的都是引用了中间变量,再看看不使用中间变量的方法。
不使用中间变量虽好,但是如果a,b的值一样,说明交换的是同一个变量,执行之后的操作就会出现问题。
第三种
void swap(int *a, int *b) { if(a == b){ return; } *a = *a + *b; *b = *a - *b; *a = *a - *b; }
第四种
void swap(int *a, int *b) { if(a == b){ return; } *a = *a - *b; *b = *a + *b; *a = *a - *b; }
第五种
void swap(int *a, int *b) { if(a == b){ return; } *a = *a ^ *b; *b = *a ^ *b; *a = *a ^ *b; }
一般来说使用位操作比加减运算要快
第六种
void swap(int *a, int *b) { if(a == b){ return; } *a = *a * *b; *b = *a / *b; *a = *a / *b; }
这种方法虽然很搓,但也是一种方法。。。
第七种
1 void swap(void *a, void *b, int length) 2 { 3 void *tmp = malloc(length); 4 if(tmp == NULL){ 5 fprintf(stderr, "the memory is full \n"); 6 exit(1); 7 } 8 memcpy(tmp, a, length); 9 memcpy(a, tmp, length); 10 memcpy(b, a, length); 11 free(tmp); 12 tmp = NULL; 13 }
第七种是一种通用的写法,可以用于任何类型的变量的交换。前提,这两个变量所占空间一样
时间: 2024-10-25 01:53:25