Какой алгоритм сортировки использует встроенный в Rust `sort`? - PullRequest
0 голосов
/ 24 февраля 2019

Какой алгоритм использует встроенный [T]::sort метод ?Можно ли взглянуть на код этого метода?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Согласно документации:

sort:

Текущая реализация

Текущий алгоритм является адаптивной итеративной сортировкой слияниемвдохновленный timsort .Он разработан, чтобы быть очень быстрым в случаях, когда срез почти отсортирован, или состоит из двух или более отсортированных последовательностей, соединенных одна за другой.

Кроме того, он выделяет временное хранилище вдвое меньше, чем само, но для краткостиSlices вместо этого используется неразмещающая вставка sort.

Что касается остальной части стандартной библиотеки и всего компилятора, источник доступен на GitHub .

sort_unstable:

Текущая реализация

Текущий алгоритм основан на быстрой сортировке с разбивкой по шаблонам Орсоном Питерсом, который сочетает в себе быстрый средний случай рандомизированной быстрой сортировки с быстрым худшим случаем heapsort, при этом достигается линейное время на срезах с определенными шаблонами.Он использует некоторую рандомизацию, чтобы избежать вырожденных случаев, но с фиксированным начальным числом, чтобы всегда обеспечивать детерминированное поведение.

Обычно это быстрее, чем стабильная сортировка, за исключением нескольких особых случаев, например, когда срез состоит из нескольких сцепленных отсортированныхпоследовательности.

Источник также доступен на GitHub .

(выделение мое)

0 голосов
/ 24 февраля 2019

Стандартный ответ, я думаю, прочитайте The Fine Manual; -)

https://doc.rust -lang.org / std / primitive.slice.html # current-creation-3

И да, можно посмотреть код, нажав на ссылку src справа от каждого документированного элемента.Для метода sort это приводит к:

https://doc.rust -lang.org / src / alloc / slice.rs.html # 206-210

Он использует приватную merge_sort функцию, которая определена здесь:

https://doc.rust -lang.org / src / alloc / slice.rs.html # 888-990

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...