快速排序中的交换功能会产生错误输出

Pra*_*ala 1 c++ sorting algorithm quicksort

交换功能快速排序.它输出错误.当我使用临时变量时,它会给出正确的输出.这是测试人员:

void swap(int &a,int &b){
    a=a+b;
    b=a-b;
    a=a-b;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常:

void swap(int &a,int &b){
    int temp=a;
    a=b;
    b=a;
}
Run Code Online (Sandbox Code Playgroud)

我在快速排序算法的分区函数中将数组元素传递给此函数.

ale*_*in0 7

没有第3个变量的交换代码看起来没问题.遗憾的是,此算法无法应用于自身交换值,例如:

void swap(int &a,int &b){   // &a == &b, the value is 123
    a=a+b;                  // a == b == 246
    b=a-b;                  // a == b == 0 (Oops!)
    a=a-b;                  // a == b == 0 
}
Run Code Online (Sandbox Code Playgroud)

另外,请注意,交换(std::swap)有一个标准函数,如果没有优化编译,你的代码比通常的swap(第三个变量)工作得慢,因为它执行更多的内存操作.此外,此代码可能会导致整数上溢或下溢,这是标准的未定义行为,可能会或可能不会按预期工作.如果我们将可读性问题(最重要的事情)添加到此列表中,建议只是不使用swap而不使用3rd变量.