两数交换最常用的方法

void swap(int &a,int &b)

{

int temp=a;

a=b;

b=temp;

}

如果没有中间变量temp可以使用呢,还有其他的三种方法

第一种之加减法实现:

void swap1(int &a,int &b)

{

a=a+b;

b=a-b;

a=a-b;

}

缺点:在进行浮点数的交换时可能会造成精度的损失。

第二种之乘除法实现:

void swap2(int &a,int &b)

{

a=a*b;

b=a/b;

a=a/b;

}

缺点:也存在浮点数时精度损失的问题,而且要加约束条件a!=0&&b!=0;

第三种之异或实现

void swap3(int &a,int &b)

{

a^=b;//a的值为a^b

b^=a;//b=b^a=b^(a^b)=a^(b^b)=a^0=a

a^=b;//a=a^b=(a^b)^a=(a^a)^b=0^b=b

}

缺点:只能对整型数据进行交换不能对浮点型数据进行交换。

其实现主要是基于异或运算的如下性质:

1.任意一个变量X与其自身进行异或运算,结果为0,即X^X=0

2.任意一个变量X与0进行异或运算,结果不变,即X^0=X

3.异或运算具有可结合性,即a^b^c=(a^b)^c=a^(b^c)

4.异或运算具有可交换性,即a^b=b^a

 

swap的实现(没有中间变量)的更多相关文章

  1. 关于swap交换操作的新方法

    swap: 在oi中,swap用于交换两个变量的数值. 初学oi时,我们这样操作: 也就是说,需要一个temp变量来寄存x或y的值,因为当一个变量被赋值成为另一个变量时,没有temp它的值会丢失. 貌 ...

  2. 无中间变量交换swap(a,b)

    #include <stdio.h> /* 加减法 整型.浮点型(损失精度) */ void swap1(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=* ...

  3. 不用中间变量交换两个数 swap(a,b);

    #include <iostream> using namespace std; int main () { ; ; cout<<"a="<<a ...

  4. 从花式swap引出的pointer aliasing问题

    上次,一个同学问我,你知不知道可以不用引入中间变量就可以实现swap? 我说,我知道,可以用加减法或者异或实现,像是这样 void mySwap(int &x,int &y) { x= ...

  5. C++中的swap(交换函数)

    交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如  int temp  = a; a = b; b = temp; 不需要 ...

  6. c实现swap函数陷阱

    swap函数陷阱 使用c实现一个交换两个数的函数,代码很简单: void swap(int *a, int *b) { *a ^= *b; *b ^= *a; *a ^= *b; } 只有3行代码,且 ...

  7. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  8. LVM 管理减少swap分区空间增加到根分区

    简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现 ...

  9. [LeetCode] Swap Nodes in Pairs 成对交换节点

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

随机推荐

  1. MySQL数据实时增量同步到Kafka - Flume

    转载自:https://www.cnblogs.com/yucy/p/7845105.html MySQL数据实时增量同步到Kafka - Flume   写在前面的话 需求,将MySQL里的数据实时 ...

  2. [转]c#快捷键

    c#快捷键(成为高手必备) CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT ...

  3. Linux(CentOS 7.0)安装Oracle11g R2

    // 注释 # root用户 $oracle用户 1. 关闭安全措施    # chkconfig iptables off // 永久关闭防火墙 # serviceiptables stop // ...

  4. centos7如何安装部署Zabbix

    参考http://www.cnblogs.com/momoshouhu/p/8041293.html 1.关闭selinux和firewall 1.1检测selinux是否关闭 [root@local ...

  5. 安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息

    安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息 作者:Eric 微信:loveoracle11g [grid@node1 grid]$ ./runcluvfy.sh stage - ...

  6. 01-Introspector内省机制

    在java领域编程中,内省机制相当的不错,可以省去我们程序员很多的不必要的代码 比如说:在jdbc工具类 我们可以将ResultSet结果集待到 javabean对象中 将http请求报文的数据 转换 ...

  7. (整理)MySQL_REHL6.5 安装MySQL5.5

    1 根据系统选择Mysql版本 https://dev.mysql.com/downloads/mysql/5.5.html?os=31&version=5.1 在命令行的方式下,REHL/C ...

  8. (转)SQLServer查询数据库各种历史记录

    原文地址https://www.cnblogs.com/seusoftware/p/4826958.html 在SQL Server数据库中,从登陆开始,然后做了什么操作,以及数据库里发生了什么,大多 ...

  9. django之COOKIE 与 SESSION

    COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  10. Codeforces Round #551 (Div. 2) A-E

    A. Serval and Bus 算出每辆车会在什么时候上车, 取min即可 #include<cstdio> #include<algorithm> #include< ...