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

时间:2017-04-07 12:44:08

标签: c++ algorithm sorting quicksort

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

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

这样可以正常工作:

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

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

1 个答案:

答案 0 :(得分:7)

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

main()

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