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)
我在快速排序算法的分区函数中将数组元素传递给此函数.
没有第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变量.