У меня проблемы с поиском хороших ресурсов, которые дают наихудший случай на месте стабильного алгоритма сортировки. Кто-нибудь знает какие-нибудь хорошие ресурсы?
Просто напоминание, означает, что он использует переданный массив, а алгоритму сортировки разрешено использовать только постоянное дополнительное пространство. Стабильный означает, что элементы с одинаковым ключом отображаются в отсортированном массиве в том же порядке, что и в оригинале.
Например, сортировка наивного слияния является наихудшим вариантом и стабильна, но использует O ( n ) дополнительное пространство. Стандартная быстрая сортировка может быть сделана стабильной, она на месте, но в худшем случае O ( n 2 ) . Heapsort на месте, в худшем случае O ( n ln n ), но не стабильный. В Википедии есть хорошая диаграмма того, какие алгоритмы сортировки имеют какие недостатки. Обратите внимание, что в списке нет алгоритма сортировки, который имеет все три условия устойчивости, наихудший случай O ( n ln ) и быть на месте.
Я нашел статью под названием «Практическая сортировка на месте», выполненную Катаяйненом, Пасаненом и Теухолой, в которой утверждается, что в худшем случае вместо стабильного варианта слияния. Если я правильно понимаю их результаты, они используют (снизу вверх?) Mergesort рекурсивно на первом 1 массива и последний1 из массива и использовать второй1 как царапать пространство, чтобы сделать слияние. Я все еще читаю это, так что любая дополнительная информация о том, правильно ли я интерпретирую их результаты, ценится.
Я также был бы очень заинтересован в наихудшем случае вместо стабильной быстрой сортировки. Из того, что я понимаю, изменение быстрой сортировки в худшем случае O ( n ln n ) требует выбора правильной оси центра, который разрушил бы стабильность, которой он обычно мог бы пользоваться.
Это чисто теоретический интерес, и у меня нет практического применения. Я просто хотел бы знать алгоритм, который имеет все эти три функции.