c语言| |交换两个数的n种方法

交换两个数的n种办法

代码如下:

#include <stdio.h>

//采用辅助空间的方法
void SwapTmp(int* a, int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

//没有采用辅助空间,运用异或计算
void SwapNotTmp(int* a, int* b)
{
    *a = (*a) ^ (*b);
    *b = (*a) ^ (*b);
    *a = (*a) ^ (*b);
}

int main()
{
    int a = 2;
    int b = 3;
    printf("交换前:a = %d, b = %d\n", a, b);
    //SwapTmp(&a, &b);
    SwapNotTmp(&a, &b);
    printf("交换后:a = %d, b = %d\n", a, b);
    return 0;
}

异或特性:相同为0,不同为1

例:对于 2 与 3

2: 0 0 1 0

3: 0 0 1 1

M=2^3:0 0 0 1

M^2: 0 0 1 1

M^3: 0 0 1 0

所以就可以采取不用辅助空间交换两个数。

猜你喜欢

转载自blog.csdn.net/qq_40399012/article/details/80820702