#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));
} /* 优点:不会溢出,可进行相同数值的交换; 缺点:运算复杂 且必须假设两待交换变量为指针类型 */
}
分享到:
相关推荐
三边交换算法的基本思想是:选取图中的任意一个三角形(三个顶点两两之间都有边相连),然后尝试通过交换其中的两条边,看是否能够降低总的边数或者改善现有的哈密顿回路。这个过程可以迭代进行,直到无法再找到可以...
**ECDH密钥交换算法程序详解** ECDH(Elliptic Curve Diffie-Hellman)是一种基于椭圆曲线密码学(ECC)的密钥交换协议,它允许两个通信方在没有事先共享任何秘密的情况下,通过公开的交流生成一个共享的秘密密钥。...
Diffie-Hellman密钥交换算法是密码学中一个重要的概念,它允许两个通信方在不安全的信道上安全地协商一个共享密钥。这个算法由Whitfield Diffie和Martin Hellman在1976年提出,是公钥基础设施(PKI)中的基础组成...
### DH密钥交换算法详解 #### 一、引言 在信息安全领域,DH密钥交换算法,即Diffie-Hellman密钥交换算法,是一种在开放的通信环境中安全地建立共享密钥的方法。该算法由Whitfield Diffie和Martin Hellman在1976年...
DH(Diffie-Hellman)秘钥交换算法是一种在不安全的通信通道上安全地交换密钥的方法,由Whitfield Diffie和Martin Hellman在1976年提出。这个算法是公钥密码学的基础之一,它允许两个通信方在没有事先共享任何秘密的...
DH密钥交换算法这个机制的巧妙在于它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道确定对称密钥。 我用Java写了两个例子,有需要的可以看看。
在本场景中,我们关注的是"交换算法",它用于生成一个给定数组的所有可能排列。全排列是指从n个不同元素中取出m个元素(m≤n),按照一定的顺序排列起来的所有可能的排列方式。当m等于n时,即为全排列。 交换算法,...
本文研究的目的是提出一种最优的二元交换算法,用于解决大规模云计算服务器的调度问题。 在云计算环境下,服务器调度问题可以被视为一个混合整数规划问题。整数规划(Integer Programming,IP)是一种数学规划方式...
由于在SSL握手协议中最耗费计算资源和造成客户端与服务器端计算不平衡的步骤是服务器端解密运算,提出了客户端平衡的密钥交换算法,用来加速SSL会话的初始化和承担服务器端的解密的预运算。对算法中的同时对多个客户...
1. **数组元素交换**:比如,给定一个数组,要求交换数组中的特定位置的元素,如两数对调、逆序排列等。 2. **链表节点交换**:在链表结构中,交换两个节点的位置,如两头节点互换,相邻节点互换等。 3. **数据结构...
交换排序中最著名的两种算法是冒泡排序(Bubble Sort)和快速排序(Quick Sort)。下面我们将分别介绍这两种算法的原理和C/C++实现。 **冒泡排序**: 冒泡排序是最简单的交换排序,它重复遍历待排序的数列,一次...
二叉树中结点左右子树的递归交换算法设计 一、知识点总览 本文主要讨论二叉树的递归交换算法的设计和实现。该算法的核心是使用递归函数来交换二叉树中所有结点的左右子树,从而实现树形结构中结点的交换。该算法的...
根据提供的文件信息,我们可以分析出该段代码是用于实现Diffie-Hellman(DH)密钥交换算法的一个示例。接下来,我们将详细解释这段代码的关键部分,并解释它们是如何实现DH密钥交换的基本原理。 ### Diffie-Hellman...
编写算法交换二叉树中所有结点的左右子树 本文档主要介绍了如何编写算法交换二叉树中所有结点的左右子树。该算法使用 C 语言实现,通过建立...通过输出结点数据和交换左右子树两个步骤,实现了二叉树的交换操作。
本文将深入探讨一种经典的无辅助变量的数据交换算法,并对其原理、应用以及潜在问题进行详细的分析。 ### 一、算法介绍 #### 1.1 原理说明 该算法的核心思想是在没有第三个临时变量的帮助下实现两个变量之间的值...
经典的两数交换算法利用了一个额外的临时变量`temp`来完成交换过程: ```c { int temp = A; A = B; B = temp; } ``` 这种方法简单直观,但需要消耗额外的存储空间用于存放临时变量`temp`的值。 ### 不使用临时...
在数据交换领域,路由算法的设计至关重要,因为它直接影响到数据传输的效率和可靠性。本文将深入探讨一种用于数据交换平台的新路由算法,旨在提高数据交换性能。首先,我们需要理解路由算法的基本概念。路由包含了两...
### Java中的两种冒泡排序算法 #### 知识点一:基本冒泡排序算法 冒泡排序是一种简单的排序算法,其基本思想是通过不断地比较相邻元素的大小,并根据需要进行交换,来达到排序的目的。 **代码实现:** ```java ...
将两个文件拖到该批处理文件上边,自动交换文件名