美文网首页
【初级】数字交换的几种方法

【初级】数字交换的几种方法

作者: 24c41111e47b | 来源:发表于2021-04-28 17:36 被阅读0次

    实现一个swap函数,交换两个变量数值,并分析每种方式的区别!


    中间变量交换法

    代码如下:

    void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
    }
    

    优点:1.简单,可读性强;2.如果a和b引用的是同一个变量,原变量值不受影响;
    缺点:需要开辟一个中间变量

    加减乘除法预算

    代码如下:

    void swap(int *a, int *b) {
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
    }
    

    优点:省去中间变量,可读性强;
    缺点:1.可能产生数值溢出问题;2.如果a和b引用的是同一个变量,结果会变为0;
    原理:求和求差还原数值;加减乘除均可使用这种思想;

    异或交换

    代码如下:

    void swap(int *a, int *b) {
    *a = *a^*b;
    *b = *a^*b;
    *a = *a^*b;
    }
    

    优点:没有产生进位 / 借位,不会产生溢出问题
    缺点:如果a和b引用的是同一个变量,结果会变为0;
    原理:同上,本质是通过差异推算

    差异法推算
    简单来说,我们只要知道a和b的差异(diff),就可以用a和diff推算出b,也可以用b和diff推算出a...
    a^b=diff (a和b的差异是diff)
    a^diff=b (a和diff的差异是什么呢?当然是b)
    b^diff=a (b和diff的差异是什么呢?当然是a)


    此外还有位与运算等其他方法,这里不作介绍;

    以上方法, 时间效率上面不会有太大差别,作者推荐优先使用 中间变量法 ,易读,运算结果准确;

    相关文章

      网友评论

          本文标题:【初级】数字交换的几种方法

          本文链接:https://www.haomeiwen.com/subject/lqovrltx.html