编程中交换两个数的方法及优缺点分析

参考博文:https://blog.csdn.net/oppo62258801/article/details/94145386

常用的编程中交换两个数的方法有如下三种:

1、中间变量交换法

2、位异或法

3、相加相减法

在实际的封装函数过程中,值传递的方式是单向的,不能实际的返回我们需要的交换后得到的两个结果,因此本文中的示例代码都通过传指针的方式来实现实际交换两个数

1、中间变量交换法

    特点:引入一个中间变量交换两个数的值;

    评价:实际使用过程中,这个版本是最安全的,不需要有额外的判断条件

   函数如下

 void swap_method1(int *data1,int *data2)
 {
    int temp = *data1;
    *data1 = *data2;
    *data2 = temp;
 }

2、位异或法

   特点:不需要引入中间变量

   评价:需要注意,传入的两个值不能一样,如果一样的话就或导致交换后的两个结果都变为0,这个在排序中经常容易出现问题,需小心使用;

  函数如下:

void swap_method2(int *data1,int *data2)
{
    if(*data1 != *data2)
    {
      *data1 = *data1 ^ *data2;
      *data2 = *data1 ^ *data2;
      *data1 = *data1 ^ *data2;
    }
}

   补充小知识:位运算符号 ^ ,在数字电路(计算机组成)中有个名词叫异或,表示两个bit不同则位1,相同则位0

   具体的来说,0^0 = 0 ; 1^1=0; 0^1=1;1^0=1; 

   因此要特别注意,为了避免在待交换的序列中可能存在两个数相同的情况,必须要判断传入的两个值是否相同,相同则不交换

3、相加相减法

   特点:不需要引入中间变量

   评价:需要注意可能存在的数字越界的情况, data1 和data2相加可能超过指定的数据类型范围;

   函数如下:

void swap_method3(int *data1,int *data2)
{
    *data1 = *data1 + *data2;
    *data2 = *data1 - *data2;
    *data1 = *data1 - *data2;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值