C语言 | 实现两个数交换的三种方法

两个数字交换是常见的题目,下面用三种方法解决一下。


方法一

思路:如何把酱油瓶子和油瓶子里面的液体交换,当然是需要再增加一个容器

  • 酱油倒进空瓶子
  • 油倒进酱油瓶子
  • 酱油再倒进油瓶子
//采用辅助空间的方法
void SwapTmp(int* a, int* b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

方法二

思路:利用数学的方法,不引入新的变量

//采用数学方法
void SwapTmp(int a, int b)
{
    a = a + b;
    b = a - b;
    a = a - b;
}

方法三

思路:位运算。利用异或运算。

异或特性:相同为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

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

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

 

你可能感兴趣的:(C/C++,C——题目,c++,leetcode,算法,数据结构,java)