Это зависит от конкретной реализации.
Если есть только один вид сравнения (≤ или <) для определения того, куда другие элементы идут относительно оси, все они войдут в один из разделов, и вы получите O (<em> n * 1004). * 2 ) производительность, поскольку размер задачи будет уменьшаться только на 1 каждый шаг.
Алгоритм , указанный здесь , является примером (сопровождающая иллюстрация для другого алгоритма).
Если есть два вида сравнений, например <для элементов слева и> для элементов справа, как в случае реализации с двумя указателями, и , если вы позаботитесь о перемещайте указатели в шаге, тогда вы можете получить идеальную производительность O ( n log n ), потому что половина равных элементов будет разделена равномерно в двух разделах.
На иллюстрациях в приведенной выше ссылке используется алгоритм, который не перемещает указатели в шаге, поэтому вы по-прежнему получаете низкую производительность (посмотрите на случай "Несколько уникальных").
Так что это зависит от того, имеете ли вы в виду этот особый случай при реализации алгоритма.
Практические реализации часто обрабатывают более широкий частный случай: если на шаге разделения нет перестановок, они предполагают, что данные почти отсортированы, и используют сортировку вставкой, которая дает еще лучшее значение O ( n ) ) в случае всех равных элементов.