zoukankan      html  css  js  c++  java
  • swap的实现(没有中间变量)

    两数交换最常用的方法

    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

     

  • 相关阅读:
    HTML技巧: 语义化你的代码
    css sprite
    Redis主从复制原理
    idea修改快捷键
    Ubuntu14.20 安装docker,创建centos6.7容器,并访问centos容器
    [转]SQL 中 with as 的用法
    ftp与sftp及sftp和scp的区别
    Linux top 命令
    Linux free 命令
    ubuntu 源方式 安装jdk
  • 原文地址:https://www.cnblogs.com/pianruijie/p/6791858.html
Copyright © 2011-2022 走看看