#include <iostream>
using namespace std;
/* 优点:运算简单 ;缺点:忽略了溢出的问题 */
void swap1(int *a, int *b);
/* 优点:运算简单 ,不纯在溢出问题;缺点:若是两个数值相同的数 就不能交换 */
void swap2(int *a, int *b);
void swap3(int *a, int *b);
int main(void)
{
int a,b;
a=3;
b=5;
cout << "a=" << a << ",b=" << b << endl;
swap1(&a, &b);
cout << "a=" << a << ",b=" << b << endl;
swap2(&a, &b);
cout << "a=" << a << ",b=" << b << endl;
swap3(&a, &b);
cout << "a=" << a << ",b=" << b << endl;
return 0;
}
void swap1(int *a, int *b)
{
*a = *a-*b;
*b = *b+*a;
*a = *b-*a;
}
void swap2(int *a, int *b)
{
*a=*a^*b;
*b=*b^*a;
*a=*b^*a;
}
void swap3(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
更多资料参见http://hi.baidu.com/chengui0327/blog/item/be7be30109086e19738b653e.html
另外,还有一种方法,但我验证不正确,还需考虑:
void swap4(int *a, int *b)
{
if(a <b)
{
a=(int*)(b-a); /* 用两个变量分配的地址来转换 */
b=(int*)(b-(int(a)&0x0000ffff)); /* int(a)&0x0000ffff 为取低16位的偏移地址 */
a=(int*)(b+(int(a)&0x0000ffff));
}
else
{
b=(int*)(a-b);
a=(int*)(a-(int(b)&0x0000ffff));
b=(int*)(a+(int(b)&0x0000ffff));
} /* 优点:不会溢出,可进行相同数值的交换; 缺点:运算复杂 且必须假设两待交换变量为指针类型 */
}
分享到:
相关推荐
由于在SSL握手协议中最耗费计算资源和造成客户端与服务器端计算不平衡的步骤是服务器端解密运算,提出了客户端平衡的密钥交换算法,用来加速SSL会话的初始化和承担服务器端的解密的预运算。对算法中的同时对多个客户...
DH密钥交换算法这个机制的巧妙在于它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道确定对称密钥。 我用Java写了两个例子,有需要的可以看看。
无线传感器网络中基于网络编码的信息交换算法及其性能分析,张佳,张淇,这篇论文主要研究用网络编码技术如何改善无线传感器网络中的两跳信息交换问题。相邻节点间的信息交换是多跳的无线传感器网络的一
不用定义中间变量,仅使用位运算来实现两个整数的交换
通过输入建立链表,并交换链表中的某两段,其他元素顺序保持不变。
将两个文件拖到该批处理文件上边,自动交换文件名
示例代码:不经过中间变量交换两个数的值。 附带代码注释
为了克服这个问题,我们提出了随机交换聚类算法的并行版本。它结合了k均值的可扩展性和随机交换的高聚类精度。该算法在 Java 中以两种方式实现。第一个实现使用 Java 并行流和 lambda 表达式。该解决方案利用能够...
对于两个数据交换,我们最常用的算法是: { temp = A; A = B; B = temp; } 这种算法采用一个临时变量temp,做中间媒介;有时候你是否想过一个问题不要临时变量能实现这个交换吗?
合并排序的合并算法一般是异地交换,本文件通过本地交换和异地交换两种方式实现了合并排序,在VC开发环境下验证通过
感觉比冒泡排序好的排序算法,借助此算法来对比冒泡排序算法,可以加深对这两种经典而双简单的排序算法的理解。
用模拟退火算法求解TSP问题 [1]主函数tsp.m [2]计算路径长度的子函数 route_long.m [3]随机交换两个节点的顺序函数exchange.m
与现有算法不同的是,该算法针对可扩展网络交换调度结构的特点,为处于最高优先级的调度器安排了两次迭代。其中的第一次迭代实现最长虚拟输出队列(VOQ)的查找,并且在最高优先级时隙之前的一个时隙完成,以缩短信号...
int a,b; a=a+b; b=a-b; a=a-b;
(1)编程实现两个程序(c/s模式),两个程序之间可通过DH协议...(2)在共享密钥建立后,两个程序之间的消息交换要保证机密性(用对称加密算法和共享密钥加密)。(3)接收方能验证消息的真实性(消息完整和来源可性)
这是我做的课程设计,关于数据结构中内排序算法性能的比较,其中包括选择排序、希尔排序、冒泡排序、两路合并排序、插入排序,一次比较它们的时间复杂度、比较次数、移动次数、交换次数等,并以表格的形式显示出来。...
序仍前往后比较每两个相邻癿元素癿大小(因此一趟排序要比较 n-1对位置相邻癿数)幵在每次发现前面癿那个数 比紧接它 后癿数大旪交换位置;迚行足够多趟直到某一趟跑完后发现这一趟没有迚行仸何交换操作(最坏情况下...
游戏的目的是用多少的步数将上图中白子和黑子的位置进行交换: ● ● ● - ○ ○ ○ 游戏的规则是:一次只能移动一个棋子;棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过两个...
图的均匀边染色是指图中任意两条相邻的边都分配到不同的颜色,且任意两个色类的颜色个数最大相差1。对图G进行均匀边染色所需的最少颜色数叫做G的均匀边色数。针对图的最小均匀边色数进行了研究,提出一种启发式算法...
本文使用一种简单易实现的遗传算法对Job-Shop调度问题进行了求解,在遗传操作中根据适应度值通过概率选择子代,两个个体的交叉不能产生可行解,因此,在交叉操作中对一个个体选取两个片段进行交换来模拟交叉操作,在...