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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值