交换功能快速排序。它输出错误。当我使用临时变量时,它会给出正确的输出。 这是测试人员:
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;
}
我在快速排序算法的分区函数中将数组元素传递给此函数。
答案 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(使用第三个变量)工作得慢,因为它执行更多的内存操作。此外,此代码可能会导致整数上溢或下溢,这是标准的未定义行为,可能会或可能不会按预期工作。如果我们在此列表中添加可读性问题(最重要的事情),建议不要使用没有第三个变量的交换。