两个数值互换的几种方式
来源:互联网 发布:数据库简答题 编辑:程序博客网 时间:2024/06/14 18:22
一.建立临时变量
1.普通的方法:
思路简介:建立一个临时变量,通过temp=a,a=b,b=temp来实现交换。
缺点:这只是一种假交换,由于这只是在函数内部临时变量间的交换,所以当函数退出,函数栈帧被释放,原本的值并没有交换。
具体方法:
int swap(int _x,int _y)
{
int z=_x; //通过建立z这个临时变量来交换_x,_y
_x=_y;
_y=z;
printf("%d %d",_x,_y);
return 0;
}
2.指针的方法:
思路简介:取两个数的地址,在swap方法中再用指针指向地址交换,这时候为数值交换(函数调用结束后原空间的值也得到了交换)。
具体方法:
int swap(int *_x,int *_y) //主函数中把两个数的地址传过来
{
int tmp = *_x; //定义中间变量 然后交换两个数
*_x = *_y;
*_y = tmp;
printf("%d %d",*_x,*_y);
}
二.不建立临时变量
1.加减交换:
思路简介:取两个数的和,然后通过减去另外一个数来得到这个数。
方法缺陷:两个数的和可能会越界。(数值小的时候可以用)。同样的这是一种假交换,函数调用结束后原本的值并没有真正的交换。
具体方法:
int swap(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 Swap3(int a, int b)
{
a = a^b;
b = a^b;
a = a^b;
printf("%d %d", a, b);
return 0;
}
本文出处http://blog.csdn.net/sayhello_world/article/details/51836288
- 两个数值互换的几种方式
- 两个数值互换的三种算法
- 交换两个数值的几种方法
- 实现“两个变量的互换”的几种方法
- 数值格式化的几种方式
- 数值格式化的几种方式
- 黑马程序员——两个变量数值的互换
- 交换数值的几种方法比较(a,b互换)
- 三种方式实现两个变量互换
- C++中两个数值交换的几种方法
- C语言交换两个变量数值的几种方法
- 黑马程序员_JAVA基础,互换两个数的值的几种方法。
- 比较两个路径的几种方式
- 两个数据交换的几种方式
- 两个变量交换的几种方式
- C++引用方式实现两个值的互换
- 将数组中两个线性表位置互换的方式
- 两种“两数互换的方式”
- 你们终于喊出自己就是公有云了?
- Linux下zookeeper的安装
- viewpager嵌套viewpager滑动处理
- java web学习总结27:jsp简单标签开发案例和打包
- VS code快捷键
- 两个数值互换的几种方式
- LoggerFactory打印代码错误日志
- redis与一些数据库及软件之间的区别
- java中的接口与工厂
- Bootstrap Table 中文文档(完整翻译版)
- linux下进程和线程状态查看
- java.lang.NoSuchMethodError: org.springframework.cache.ehcache.EhCacheFactoryBean.setMaxEntriesLocal
- sql语句实现查询实例
- 二叉搜索树转有序双向链表