美文网首页
交换两个数的四种方法

交换两个数的四种方法

作者: 星空梦想 | 来源:发表于2018-10-18 17:09 被阅读58次

    一.建立临时变量

           1.普通的方法:

    思路简介:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。

     缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈帧被释放,原本的值并没有交换。

    int change(int x,int y){

        int z=x; //通过建立z这个临时变量来交换

        x=y;

        y=z;

      printf("%d %d",x,y);

    return 0;

    }

    2.指针的方法:

    思路简介:取两个数的地址,在swap方法中再用指针指向地址交换,这时候为数值交换(函数调用结束后原空间的值也得到了交换)。

    int change(int *x,int *y)//主函数中把两个数的地址传过来

    {

    int tmp = *x;//定义中间变量 然后交换两个数

    *x = *y;

    *y = tmp;

    printf("%d %d",*x,*y);

    }

    二.不建立临时变量

            1.加减交换:

                      思路简介:取两个数的和,然后通过减去另外一个数来得到这个数。

                      方法缺陷:两个数的和可能会越界。(数值小的时候可以用)。同样的这是一种假交换,函数调用结束后原本的值并没有真正的交换

    int change(int a,int b) { printf("%d %d",a+b-a,a+b-b); return 0; }

    2.异或方法:

                          思路简介:通过二进制异或方法交换,如a=3二进制为11,b=2的二进制为10,按位异或(两个值相同为0,否则为1)

    a=a^b,                异或后a=11^10=01

    b=a^b,                异或后b=01^10=11(此时b为开始a的值)

    a=a^b                异或后a=01^11=10(此时a为开始b的值)

    这样子a与b就实现了交换

    int change(int *a, int *b)

    { *a = *a^*b;

      *b = *a^*b;

      *a = *a^*b;

      printf("%d %d", *a, *b);

      return 0;

    }

    相关文章

      网友评论

          本文标题:交换两个数的四种方法

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