• 不使用第三方变量交换变量的值


    变量的重新定义和赋值是要占用内存的,所以尽可能少的变量来完成计算是最理想的事情,通常我们的做法是 :

        定义一个新的变量,借助它完成交换。代码如下: 

    标准算法:

    int a=10int b=20;  
    int t=a; 
    a=b; 
    b=t; 

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

        添加临时变量不可避免的造成内存的占用,有没有不通过临时变量的方法哪,答案肯定的

    方法 1

    int a=10, int b=20
    a=a+b; //a=30 b=20
    b=a-b;    //a=30 b=10
    a=a-b; //a=20 b=10

    这种方法的本质就是把变量 a+b 作为了临时变量来使用

    方法 2

     int a=10, int b=20
    
     a=b+(b=a)*0;    //   b=a+(a=b)*0;

    这种方法的看起来很简单,但是在习惯了传统的算法的前提下不是很容易想到的

    方法 3

    int a=10,b=12; //a=1010^b=1100; 
    a=a^b; //a=0110^b=1100; 
    b=a^b; //a=0110^b=1010; 
    a=a^b; //a=1100=12;b=1010; 

    此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。 
    即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。

         以上三个算法均实现了不借助其他变量来完成两个变量值的交换,

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

  • 相关阅读:
    #Git 21天打卡第一天 01天0526
    老徐第六期百人计划之职业发展方向&学习方向
    LR12.53安装中文补丁包,录制后回放脚本一致卡在编译的问题
    常用oracle语句整理
    LoadRunner11之批量插入SQL数据~2
    LoadRunner12之SQLServer数据库批量插入--.Net协议
    Jmeter连接Oracle数据库简单使用
    AppScan安装使用
    SQL多表连接
    [剑指Offer] 4.二维数组的查找
  • 原文地址:https://www.cnblogs.com/a164266729/p/3301079.html
Copyright © 2020-2023  润新知