快速排序中交换两个数时,不使用辅助变量的bug. 陷阱

在进行交换两个数据的时候,我们可以多种上方法实现。一般的是使用一个额外的辅助变量来做交换,其它是利用数学运算符来作交换了。

下面是几个实现数据的交换的函数。

第一类,使用辅助变量来完成交换

void swap1(int &a,int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
第二类,使用运算符来完成交换。
void swap2(int &a,int &b)
{
    a=a+b;
    b=a-b;
    a=a-b;
}

void swap3(int &a,int &b)
{
  a=a^b;
    b=a^b;
    a=a^b;
}

void swap4(int &a,int &b)
{
   a=a*b;
    b=a/b;
    a=a/b;

}

但是在使用运算符完成数据交换时,对于同一个地址的数据交换会将该地直的值,变为0的。

如:

  int a[]={5,6,7,8};

我们交换swap(a[0],a[0]). 注意:我们交换是数组中同一个位置上的数。

使用上面swap2-4:会使我们把a[0]变成0的。

这个要注意的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值