Как уже упоминал Карл в своем комментарии, задача равна шагу разделения в алгоритме быстрой сортировки за исключением , что вы должны найтисначала выберите срединное значение и используйте его в качестве основного элемента.
Вычисление медианы можно вычислить с помощью операций O (n), шаг разделения тоже линейный (O (n)), поэтому общая производительность в худшем случае все же лучше, чемполная сортировка (O (n log (n)).
Алгоритм будет выглядеть следующим образом (необходимо реализовать стандартные методы):
public int[] roughSort(int[] input) {
int pivot = findMedian(input);
int[] result = partition(input, pivot);
return result;
}