以下算法可以对类型为K
的可比较变量x
、y
和z
进行排序,使用的是operator<
:
void sort2(K& x, K& y) {
if(y < x)
swap(x, y);
}
void sort3(K& x, K& y, K& z) {
sort2(x, y);
sort2(y, z);
sort2(x, y);
}
在“最坏情况”下,这需要三次交换。然而,基本数学告诉我们,只需使用两次交换即可对三个值进行排序。
例如:值(c,b,a)将使用三次交换进行排序:(c,b,a)->(b,c,a)->(b,a,c)->(a,b,c)。然而,只需要一次交换:(c,b,a)->(a,b,c)。
在所有情况下,用最多两次交换对三个变量排序的最简单算法是什么?