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

     

  • 相关阅读:
    Python解释器相关知识
    简单了解下Flask
    Scoket编程
    __file__的作用
    jquery编写可折叠列表
    浑浑噩噩的一天
    js实现杨辉三角
    js闭包
    python读取word表格
    HTMLTestRunner报告
  • 原文地址:https://www.cnblogs.com/pianruijie/p/6791858.html
Copyright © 2011-2022 走看看