c++ - 有没有更有效的方法来对两个数字进行排序?

标签 c++

我希望 dLowerdHigher 分别具有两个 double 值中的较低值和较高值 - 即,如果它们是错误的方式,则对它们进行排序。最直接的答案似乎是:

void ascending(double& dFirst, double& dSecond)
{
    if(dFirst > dSecond)
        swap(dFirst,dSecond);
}

ascending(dFoo, dBar);

但这似乎是一件显而易见的事情,我想知道我是否没有使用正确的术语来找到标准例程。

此外,您将如何使它通用?

最佳答案

这是处理它的好方法。它与您将要获得的一样高效。 我怀疑这个特定函数是否有一个公认的名称。这显然叫做 comparison-swap。

将其归纳为类型非常简单:

template <typename T>
void ascending(T& dFirst, T& dSecond)
{
    if (dFirst > dSecond)
        std::swap(dFirst, dSecond);
}

证实这个功能:

int main() {
    int a=10, b=5;
    ascending(a, b);
    std::cout << a << ", " << b << std::endl;

    double c=7.2, d=3.1;
    ascending(c, d);
    std::cout << c << ", " << d << std::endl;

    return 0;
}

这打印:

5, 10
3.1, 7.2

关于c++ - 有没有更有效的方法来对两个数字进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135586/

相关文章:

c++ - 可移植设备的 Windows 句柄

c++ - 如何解决似乎不太可能是内存不足问题的 bad_alloc?

c++ - 派生类对象的地址超过 1 个?

c++ - 存储派生对象的映射

c++ - 使用 AES 使用 Common Crypto 和 Crypto++ 加密时的不同结果

c++ - wxwidgets 中的按钮 - 不同的行为

c++ - 根据 3D 对象的位置旋转相机

c++ - Waf 在 C++ 构建上抛出错误

c++ - 对于像 ETX/STX 对这样的多个字符,是否有类似于 std::quote 的东西

c++ - 'var' 的存储大小未知