• 交换两个数的方法总结


    今天总结一下交换两个数的方法,以前自己只会一种,最近在准备招聘会,分享一下自己的所获;

    方法1:使用函数传址:

    1 void swap(int *p1, int *p2)
    2 {
    3     int tmp;
    4     
    5     tmp = *p1;
    6     *p1 = *p2;
    7     *p2 = tmp;
    8 }

    方法二:在C++中传引用

    1 void swap(int &x, int &y)
    2 {
    3     int tmp ;
    4     tmp = x;
    5     x = y;
    6     y = tmp;
    7 }

    方法三:不使用中间变量

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

    方法四:上述代码可能会产生溢出,改进为

    void swap(int *p1, int *p2)
    {    
        if(*p1 != *p2)
        {
            *p1 ^= *p2;
            *p2 ^= *p1;
            *p1 ^= *p2;
        }
    }

    其中if判断是必须的,否则当有多个数或者两个数相等时会改变原来的值。

    方法五:使用宏定义1

    #define SWAP(a, b) {if((a) != (b)) {(a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b);}}

    方法六:使用宏定义2

    1 #define SWAP(a, b) {if((a) != (b)) {(a) ^= (b);(b) ^= (a);(a) ^= (b);}}
    #define SWAP(a, b) do{if((a) != (b)) {(a) ^= (b);(b) ^= (a);(a) ^= (b);}}while(0)

    do{......}while(0)用于封装语句序列并确保正确性。

  • 相关阅读:
    UVA-448
    算法提高-集合选取
    算法训练Maze
    UVA-10061
    树状数组
    前缀和
    【UVA
    统计Linux下的CPU状态信息
    Android_内部文件读取
    Android打开/data/目录以及导出文件
  • 原文地址:https://www.cnblogs.com/philospy/p/4093424.html
Copyright © 2020-2023  润新知