gpt4 book ai didi

c++ - 快速排序中的交换功能给出错误的输出

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:40 25 4
gpt4 key购买 nike

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

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;
}

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

最佳答案

没有第三个变量的交换代码看起来没问题。不幸的是,该算法不能用于与自身交换值,例如:

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
}

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

关于c++ - 快速排序中的交换功能给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com