现在的位置: 首页 > 综合 > 正文

不使用中间变量实现两个数的交换

2018年03月16日 ⁄ 综合 ⁄ 共 429字 ⁄ 字号 评论关闭

在编程的过程中经常会遇到将两个数交换,特别是在排序的时候。一般的实现两个数的交换都要使用中间变量如下:

void inline swap(int &a,int &b)
{
    int tmp ;
    tmp=a ;
    a=b ;
    b=tmp ;
}

注意:这里要使用引用传参或者指针传参,如果写成swap(int a, int b)就错了,这里就不用解释了!
这个过程中使用了中间变量,当然就不满足要求了。
网上搜索了一下,一般有一下两种方法:

void inline swap(int &a,int &b)
{
    a=a+b ;
    b=a-b ;
    a=a-b ;
}
void inline swap(int &a,int &b)
{
    a=a^b ;
    b=a^b ;
    a=a^b ;
}

这两种方法都可以实现两个不同的数的交换,第一种方法有可能出现相加溢出的问题,但是当两个数相同的时候,就会出现问题。因此在函数加入判断语句就OK了,如下:

void inline swap(int &a,int &b)
{
    if(a==b)
    {
        return ;
    }
    a=a^b ;
    b=a^b ;
    a=a^b ;
}

抱歉!评论已关闭.