Это на самом деле не классическая проблема «сортировки»… поскольку существует только фиксированное количество возможных значений, это известно как проблема разбиение , и существует эффективное решение для трехстороннего подхода.раздел, известный как голландский флаг сортировки , впервые предложенный Edsger Dijkstra.
Этот алгоритм работает в O ( n ) и требует только одного прохода по массиву.
Алгоритм также можно найти довольно тривиально, развивая инвариант цикла.