公共英语三级怎么查询:怎么写一个函数swap(int a,int b)不用其他的辅助变量实现a,b的交换

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 10:55:26
c语言和数据结构方面的问题 希望高手给我解决一下
我很着急 谢了

数学法:(容易导致溢出,缺乏程序的健壮)
a = a + b;
b = a - b;
a = a - b;

逻辑法(不会有溢出的风险)
a = a ^ b;
b = a ^ b;
a = a ^ b;

指针法:(交换地址的方法应该是最节约的时间的,但需要额外的指针空间)
int* x=&a,y=&b;
x=&b;
y=&a;

直接法:(没有溢出风险,浪费了空间)
temp=a; a=b; b=temp;

当然后2条使用了中间变量,呵呵!

一般我们采用这种方法:
swap(int &a, int &b)
{
a = a + b;
b = a - b;
a = a - b;
}

但是逻辑法是最好的,避免了数据溢出,而且比较快捷
swap(int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}

如果不使用引用的话,就换做指针吧,一样的效果,执行效率也一样:
swap(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}

不借助其他临时变量,怎么搞啊

简单:
a = a + b;
b = a - b;
a = a - b;

//实现
swap(int& a, int& b){
a = a + b;
b = a - b;
a = a - b;
}

用指针~~~
那也不能只用两个啊

不是自己找麻烦吗。。
这样的程序写出来只能增加阅读的困难。