Это изменение прошло через список рассылки core-libs , когда оно появилось, так что там есть некоторые обсуждения и полезные ссылки. Вот веб-версия с изменениями обзора кода, а также оригинальный патч .
Комментарии в коде говорят:
Замечание по реализации: Эта реализация является стабильной, адаптивной,
итеративная сортировка слиянием, которая требует намного меньше чем n lg (n) сравнений
когда входной массив частично отсортирован, предлагая
производительность традиционной сортировки слиянием при входном массиве
в произвольном порядке. Если входной массив почти отсортирован, то
реализация требует приблизительно n сравнений.
Требования к временному хранению отличаются от небольшой константы для почти отсортированных
входные массивы для n / 2 ссылок на объекты для произвольно упорядоченного ввода
массивы.
Реализация использует одинаковое преимущество по возрастанию и
в порядке убывания в его входном массиве, и может использовать
Восходящий и нисходящий порядок в разных частях одного и того же
входной массив. Он хорошо подходит для объединения двух или более отсортированных массивов:
просто объедините массивы и отсортируйте полученный массив.
Реализация была адаптирована из списка рассылки Тима Питерса для Python
TimSort . Он использует приемы Питера Макилроя "Оптимистичный
"
Сортировка и теоретико-информационная сложность ", в трудах
Четвертый ежегодный симпозиум ACM-SIAM по дискретным алгоритмам, стр. 467-474,
Январь 1993 года.
Там находится очень полезная ссылка на подробности реализации Python , и я думаю, что это отличное место для начала, а затем код. Чтобы достичь невероятно высокого уровня, timsort улучшает производительность, замечая прогоны отсортированных данных и используя преимущества этой структуры во время сортировки.