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

交换两个数的四种方法

作者: 星空梦想 | 来源:发表于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;

}

相关文章

  • 交换两个数的四种方法

    一.建立临时变量 1.普通的方法: 思路简介:建立一个临时变量,通过temp=a,a=b,b=temp来实现...

  • 交换两个数字的方法

    今天在写快排的时候遇到一个问题,排序的结果中某些数字莫名被清零。断点调试之后发现原来是交换函数的问题。大体上说,交...

  • C#语言规范(小例子)

    一、交换两个数字的值 1、普通交换 2、用方法执行交换 方法传值必须加ref 不加只是交换原来值的副本,值本身...

  • Python3 & 交换的底层逻辑

    Python 交换变量,可以使用中间变量的方法交换两个变量的值,例如: 但是在Python中 交换两个数的值可以有...

  • 交换两个数

    你看到的这个文章来自于http://www.cnblogs.com/ayanmw/p/3423712.html 第...

  • 交换两个数

    问题:如果要求不使用临时变量,应该如何交换两个变量的值?   解决这个题的方式有好几种,第一种当然就是使用系统自带...

  • C 语言实例12 - 交换两个数的值

    使用临时变量交换两个数的值 不使用临时变量交换两个数的值

  • 小谈两数比较和交换问题

    比较 1、两个变量int a和int b,找出两个数中间比较大的。方法一: 方法二: 方法三: 交换 2、两个变量...

  • 两个数值交换

    原理是:一个数异或同一个数两次,结果还是那个数 swift 交换方法可以这样

  • Java使用异或交换两个整数或者字符串的用法及原理

    java交换两个数或字符串可以用temp来交换,如果不使用temp,有下面两种交换方法: 1.对于数来说,可以用如...

网友评论

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

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