Следующий алгоритм может сортировать три переменные x, y и z типа K, которые сопоставимы с помощью 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,До нашей эры). Однако одного свопа было бы достаточно: (c, b, a) → (a, b, c).
Какими будут самые простые алгоритмы, которые сортируют три переменные с не более чем двумя свопами во всех случаях?
