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

来源:互联网 发布:易语言获取js后的源码 编辑:程序博客网 时间:2024/06/14 17:28

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

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

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

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的。

这个要注意的。

0 0
原创粉丝点击