std::sort
(如理查德所建议的)是一种解决方案,但恕我直言,对于 3 个元素的数据集来说,这样的重枪并不是必需的。对于 3 个变量,可以展开排序(正如 OP 尝试的那样),并且各种可用的排序算法可能差异很大(关于比较和交换的顺序),或者不会对这个小样本带来任何改进。
因此,我进行了展开排序(重新类似于我认为的冒泡排序):
#include <iostream>
void sort(int &a, int &b, int &c)
{
if (a < b) std::swap(a, b);
if (b < c) std::swap(b, c);
if (a < b) std::swap(a, b);
}
int main()
{
// any permutation of { 1, 2, 3 } (i.e. any possible order)
int tests[][3] = {
{ 1, 2, 3 },
{ 1, 3, 2 },
{ 2, 1, 3 },
{ 2, 3, 1 },
{ 3, 1, 2 },
{ 3, 2, 1 }
};
// apply sort() to every test set
for (int *test : tests) {
int a = test[0], b = test[1], c = test[2];
std::cout << "a: " << a << " b: " << b << " c: " << c << " sorted: ";
sort(a, b, c);
std::cout << "a: " << a << " b: " << b << " c: " << c << '\n';
}
// done
return 0;
}
Output:
a: 1 b: 2 c: 3 sorted: a: 3 b: 2 c: 1
a: 1 b: 3 c: 2 sorted: a: 3 b: 2 c: 1
a: 2 b: 1 c: 3 sorted: a: 3 b: 2 c: 1
a: 2 b: 3 c: 1 sorted: a: 3 b: 2 c: 1
a: 3 b: 1 c: 2 sorted: a: 3 b: 2 c: 1
a: 3 b: 2 c: 1 sorted: a: 3 b: 2 c: 1
coliru 上的现场演示 http://coliru.stacked-crooked.com/a/720eba6d7c471354