热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

如何不使用额外变量来交换两变量

交换两个变量,通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法。

交换两个变量,通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换。代码如下:

int a,b;
a=10; b=15;
int t;
t=a; a=b; b=t;

这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流,一般情况下碰到交换变量值的问题,都应采用此算法(以下称为标准算法)。

上面的算法最大的缺点就是需要借助一个临时变量。那么不借助临时变量可以实现交换吗?答案是肯定的!这里我们可以用三种算法来实现:1)算术运算;2)指针地址操作;3)位运算。

不使用第三个变量互换两个变量的方法。

第一种方法:

';
echo $b.'
'; ?>

第二种方法是使用位运算符:

';
echo $b.'
'; $a="a"; $b="b"; $a=$a^$b; $b=$a^$b; $a=$a^$b; echo $a.'
'; echo $b.'
'; ?>

第三种不怎么样的:

';
echo $b.'
'; ?>

以上三个算法均实现了不借助其他变量来完成两个变量值的交换,相比较而言算术算法和位算法计算量相当,地址算法中计算较复杂,却可以很轻松的实现大类型(比如自定义的类或结构)的交换,而前两种只能进行整形数据的交换(理论上重载"^"运算符,也可以实现任意结构的交换)。

介绍这三种算法并不是要应用到实践当中,而是为了探讨技术,展示程序设计的魅力。从中可以看出,数学中的小技巧对程序设计而言具有相当的影响力,运用得当会有意想不到的神奇效果。而从实际的软件开发看,标准算法无疑是最好的,能够解决任意类型的交换问题。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1008,欢迎访问原出处。


推荐阅读
author-avatar
ARUAN地盘_740
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有