美文网首页
【初级】数字交换的几种方法

【初级】数字交换的几种方法

作者: 24c41111e47b | 来源:发表于2021-04-28 17:36 被阅读0次

实现一个swap函数,交换两个变量数值,并分析每种方式的区别!


中间变量交换法

代码如下:

void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

优点:1.简单,可读性强;2.如果a和b引用的是同一个变量,原变量值不受影响;
缺点:需要开辟一个中间变量

加减乘除法预算

代码如下:

void swap(int *a, int *b) {
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}

优点:省去中间变量,可读性强;
缺点:1.可能产生数值溢出问题;2.如果a和b引用的是同一个变量,结果会变为0;
原理:求和求差还原数值;加减乘除均可使用这种思想;

异或交换

代码如下:

void swap(int *a, int *b) {
*a = *a^*b;
*b = *a^*b;
*a = *a^*b;
}

优点:没有产生进位 / 借位,不会产生溢出问题
缺点:如果a和b引用的是同一个变量,结果会变为0;
原理:同上,本质是通过差异推算

差异法推算
简单来说,我们只要知道a和b的差异(diff),就可以用a和diff推算出b,也可以用b和diff推算出a...
a^b=diff (a和b的差异是diff)
a^diff=b (a和diff的差异是什么呢?当然是b)
b^diff=a (b和diff的差异是什么呢?当然是a)


此外还有位与运算等其他方法,这里不作介绍;

以上方法, 时间效率上面不会有太大差别,作者推荐优先使用 中间变量法 ,易读,运算结果准确;

相关文章

  • 【初级】数字交换的几种方法

    实现一个swap函数,交换两个变量数值,并分析每种方式的区别! 中间变量交换法 代码如下: 优点:1.简单,可读性...

  • iOS -- runtime的应用

    runtime主要有一下几种应用场景 方法交换 添加属性 (一)方法交换 (1)字体适配 方法交换实际交换的是方法...

  • JS中变量交换

    本篇主要说的是JS变量交换之中的数字交换 数字交换可能是这里面方法最为丰富的一种了,因为可以用数学计算的方法来做,...

  • C#语言规范(小例子)

    一、交换两个数字的值 1、普通交换 2、用方法执行交换 方法传值必须加ref 不加只是交换原来值的副本,值本身...

  • jsday01

    js 交换两个值的方法 方法一 方法二(适用于数字交换) 方法三(位运算) 什么时候值是undefined (变量...

  • 【基础学习】C 指针实现数字交换

    通过 temp 交换 a、b 的值。 通过把 a、b 的指针传到 swap 方法中,实现数字的交换,因为方法是传值...

  • 数组位置交换的几种方法

    1.引入第三个变量 2.splice方法, splice() 方法会直接对数组进行修改,splice() 方法向/...

  • leetcode 46 全排列(python)

    递归+交换 递归+跳过已选数字 第一种方法的图解,有空补

  • 交换两个数字的方法

    今天在写快排的时候遇到一个问题,排序的结果中某些数字莫名被清零。断点调试之后发现原来是交换函数的问题。大体上说,交...

  • 关于排序算法中交换两个数

    昨天写排序算法的时候遇到一个问题:将交换两个数的几句代码定义成一个静态方法,需要交换数字的时候调用这个方法,结果排...

网友评论

      本文标题:【初级】数字交换的几种方法

      本文链接:https://www.haomeiwen.com/subject/lqovrltx.html