吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 564|回复: 13
收起左侧

[学习记录] 多种方法交换两个变量的值

[复制链接]
夜雨微澜 发表于 2024-3-22 22:02
今天分享如下三种方法,来达到交换两个变量的值的目的:
方法零:直接交换法(仅适用于Python)
在Python中,可以直接交换两个变量的值,示例代码如下
[Python] 纯文本查看 复制代码
a,b=b,a

注意:其他语言可能不适用
方法一:中间变量交换法
这是最普遍,且最常用的一种方法。例如我们要交换a,b两个变量,可以先建立一个临时变量t(emp),将a赋值给t,使t存储a的初值,然后将b赋值给a,最后将t赋值给b,来达到交换的目的。
示例代码如下(使用Python)
[Python] 纯文本查看 复制代码
t=a
a=b
b=t

优点:简单清晰易懂,适用于所有类型的变量。缺点:浪费一个变量的空间,适用于对空间要求不严格的场合。
方法二:加减交换法(仅适用于数值变量,c语言等将字符视为ASCII的还适用于字符变量)
先上代码(Python)
[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为本身。
该算法交换变量的代码如下:
[Python] 纯文本查看 复制代码
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语言:方法零
变量为非数值变量:方法一

免费评分

参与人数 1热心值 +1 收起 理由
LuRenWang1235 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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
哈哈!很基础的教程!
鹿坪 发表于 2024-3-23 08:16
感谢分享,学到了
 楼主| 夜雨微澜 发表于 2024-3-23 21:30
DEATHTOUCH 发表于 2024-3-22 23:13
实际上,相信编译器,用临时变量就是最好的。

其他方法实际意义不大,但是考试考。
异或法是我在练习软考的时候总结的,所以总结了各种方法分享出来
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表