Для начала, я предполагаю, что другой код не показан, так как я уверен, что код, который вы показали самостоятельно, не будет работать.
Извините, что украл ваш огонь, но я боюсь, что код, который вы показываете, кажется Quicksort, и не только это, но код, возможно, страдает от некоторых ошибок.
Рассмотрим случай сортировки списка идентичных элементов. Ваш метод _in_place
, который в Quicksort обычно называется разделением, не будет корректно перемещать какие-либо элементы, но в конце j
и i
отражают список, имеющий только один раздел, содержащий весь список , в этом случае вы бы снова повторить на весь список навсегда. Я полагаю, что, как уже упоминалось, вы ничего не возвращаете из этого или, кажется, на самом деле полностью сортируете где угодно, поэтому мне остается только догадываться, как это будет использовано.
Боюсь, что использование настоящей медианы для быстрой сортировки - это не только, возможно, довольно медленная стратегия в среднем случае, она также не избегает наихудшего случая O (n ^ 2), опять же, список идентичных элементов обеспечит такой худший случай. Тем не менее, я думаю, что трехсторонняя сортировка Quicksort с таким алгоритмом выбора медианы гарантирует время O (n * log n). Тем не менее, это известная опция для выбора сводной области, а не новый алгоритм.
Короче говоря, это, кажется, неполная и, возможно, глючная быстрая сортировка, и без трехстороннего разбиения использование медианы не гарантирует вам O (n * log n). Однако я чувствую, что это хорошая вещь и стоит поздравить вас с тем, что вы сами подумали об идее использования медианы - даже если об этом раньше думали другие.