夜雨微澜 发表于 2024-3-22 22:02

多种方法交换两个变量的值

今天分享如下三种方法,来达到交换两个变量的值的目的:
方法零:直接交换法(仅适用于Python)
在Python中,可以直接交换两个变量的值,示例代码如下
a,b=b,a
注意:其他语言可能不适用
方法一:中间变量交换法
这是最普遍,且最常用的一种方法。例如我们要交换a,b两个变量,可以先建立一个临时变量t(emp),将a赋值给t,使t存储a的初值,然后将b赋值给a,最后将t赋值给b,来达到交换的目的。
示例代码如下(使用Python)
t=a
a=b
b=t
优点:简单清晰易懂,适用于所有类型的变量。缺点:浪费一个变量的空间,适用于对空间要求不严格的场合。
方法二:加减交换法(仅适用于数值变量,c语言等将字符视为ASCII的还适用于字符变量)
先上代码(Python)
a=a+b
b=a-b
a=a-b
解释一下:
这里我们可以设,初始状态下,a的值是m,b的值是n。
第一行执行完毕之后,a=m+n,b=n。
第二行执行完毕之后,a=m+n,b=(m+n)-n=m,此时m就换到了b上。
第三行执行完毕之后,a=m+n-m=n,b不变,此时,二者完成了互换。
优点:节省空间,相比于异或法更好理解,缺点:只适用于数值变量(或字符变量)。
方法三:异或交换法
在了解这个算法之前,先来了解一下什么是异或。
可以理解为,将两个数值转化为二进制,对齐各位,如果某一位上数值相同(都为0或者都为1),则结果为0;不同(一个1一个0),则为1。
因此,我们可以得到如下性质:
0、a^b=b^a
1、a^a=0
2、a^0=a
根据以上性质,可得:a^a^a=a
解释:根据性质1,我们可以将原式前两项替换为0。替换后为0^a。再根据性质0和2,得出最后的结果为a。即一个数异或自身两次,结果为自身。
用人话讲,就是异或顺序不影响结果(前后可以交换),一个数异或自身一次为0,两次为本身,一个数异或0为本身。
该算法交换变量的代码如下:
a=a^b
b=a^b
a=a^b
同样,我们认为a的初值为m,b的初值为n。
第一行执行完毕,a=m^n
第二行执行完毕,根据上述性质,b=m^n^n=m^(n^n)=m^0=m
第三行执行完毕,根据上述性质,a=m^n^m=n^0=n
到此,就交换完毕了。
本方法优点:神速,节省空间。(位运算要远快于加减运算)。缺点:同方法二。
针对不同情况,推荐使用的方法:
要求速度:方法三
清晰易懂:方法一
Python语言:方法零
变量为非数值变量:方法一

buladelajiao 发表于 2024-3-22 22:44

这个好,谢谢分享。

LuRenWang1235 发表于 2024-3-22 23:08

看懂了,多谢分享。

DEATHTOUCH 发表于 2024-3-22 23:13

实际上,相信编译器,用临时变量就是最好的。

zhufengwan 发表于 2024-3-23 00:24

学习了,之前只会中间变量交换法

52PJ070 发表于 2024-3-23 02:26

不错,学习了,谢谢分享!

cfvgbhnj 发表于 2024-3-23 07:59

学习了,总结到位!

lyrong2008 发表于 2024-3-23 08:04

哈哈!很基础的教程!{:1_921:}

鹿坪 发表于 2024-3-23 08:16

感谢分享,学到了

夜雨微澜 发表于 2024-3-23 21:30

DEATHTOUCH 发表于 2024-3-22 23:13
实际上,相信编译器,用临时变量就是最好的。

其他方法实际意义不大,但是考试考。
异或法是我在练习软考的时候总结的,所以总结了各种方法分享出来
页: [1] 2
查看完整版本: 多种方法交换两个变量的值