《c语言程序设计》--4种“交换算法”介绍。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 1 页 共 2 页
算法 交换
在很多问题的解决中都需要使用到交换这个方法,比如排序时,需要将两个变量的值互换等等。交换是指将两个变量的值进行互换。假设有整型变量a 和b ,分别存储整数2和6,如图01-01所示。要将变量a 和b 交换就意味着交换变量a 和变量b 中的值,使得变量a 存放变量b 交换前的值,而变量b 存放变量a 交换前的值,如图01-02所示。
图01-01 图01-02 语句“a=b; b=a;”是不能实现变量a 、b 交换的,只可能使得a 、b 最终都存放变量b 的值(大家可以编程试一试)。其原因是赋值操作具有覆盖性,执行a=b ;语句后,a 原来的值已经被覆盖了,此时a 最新的值就是b 的值,再实现b=a ;时,b 的值就是a 最新的值,也就是b 的值。
一、 中间变量法
要实现交换,最基本、最通用的方法是中间变量法。该方法的基本思路是定义第三个变量t ,用于暂时保存两个变量中的某一个变量的原值。具体实现代码如下:
t = a; a = b; b = t;
交换过程请大家自己仿照图01-01自己给出。注意每一个变量画一个方框,
每执行一步后,改变被赋值变量的值。
【注意事项】
此处,中间变量t 可以暂存变量
a 的值也可以暂存变量
b 的值,不过一旦对变量t 的赋值语句确定后,后面两个赋值语句的顺序不是任意的。赋值顺序的记忆可总结为“t 中暂存的变量先被赋值”。即t = a; a = b; b = t;或者t = b; b = a; a = t;。
二、算术加减法
对于数值型数据还可以采用算术加减法来实现交换,其基本思想是以a获得b的值,以b获得a的值作为目标,进行加减运算,从而完成交换。具体实现可用如下代码:
a = a+b;
b = a-b; a = a-b;
三、思考与练习
1. 请编写程序验证“交换”算法。
2. 请编写程序验证“交换”算法,要求“交换”算法使用函数来实现。
3. 请大家思考一下,使用算术加减法实现的“交换”算法有什么限制?
4. 请大家思考一下,我们能不能使用乘除法来实现“交换”算法?如果可
以,那么具体代码如何来编写呢?使用乘除法来实现“交换”算法,有
什么限制呢?
5. 拓展
两个变量(一般为整型或字符型)的交换还可以使用“异或”运算符。
具体步骤如下:
int a,b;
a=a^b; b=a^b; a=a^b;