Какой алгоритм использует Array#sort()
функция JavaScript ? Я понимаю, что для выполнения разных видов сортировки могут потребоваться всевозможные аргументы и функции, меня просто интересует, какой алгоритм использует сортировка ванили.
javascript
algorithm
arrays
sorting
latortuga
источник
источник
Ответы:
Если вы посмотрите на эту ошибку 224128 , похоже, что MergeSort используется Mozilla.
источник
Я только что смотреть на WebKit (Chrome, Safari ...) источник . В зависимости от типа массива используются разные методы сортировки:
Числовые массивы (или массивы примитивного типа) сортируются с использованием стандартной библиотечной функции C ++,
std::qsort
которая реализует некоторые варианты быстрой сортировки (обычно интросортировки ).Смежные массивы нечислового типа подвергаются строковому форматированию и сортируются с использованием mergesort, если доступно (для получения стабильной сортировки) или
qsort
если сортировка слиянием недоступна.Для других типов (несмежные массивы и предположительно для ассоциативных массивов) WebKit использует либо сортировку выбора (которую они называют «мин.» ), Либо , в некоторых случаях, сортировку через дерево AVL. К сожалению, документация здесь довольно расплывчата, поэтому вам придется проследить пути кода, чтобы фактически увидеть, для каких типов используется метод сортировки.
И затем есть драгоценные камни как этот комментарий :
- Будем просто надеяться, что тот, кто на самом деле «исправляет» это, лучше понимает асимптотическую среду выполнения, чем автор этого комментария, и понимает, что сортировка по основанию имеет немного более сложное описание среды выполнения, чем просто O (N).
(Спасибо phsource за указание на ошибку в исходном ответе.)
источник
Для JS не требуется предварительное требование использовать определенный алгоритм сортировки. Как уже упоминалось здесь, Mozilla использует сортировку слиянием. Однако в исходном коде Chrome v8 на сегодняшний день он использует QuickSort и InsertionSort для небольших массивов.
Источник двигателя V8
Из строк 807 - 891
Обновление По состоянию на 2018 V8 использует TimSort, спасибо @celwell. Источник
источник
Стандарт ECMAscript не определяет, какой алгоритм сортировки должен использоваться. Действительно, разные браузеры имеют разные алгоритмы сортировки. Например, метод sort () в Mozilla / Firefox нестабилен (в смысле сортировки слова) при сортировке карты. Сортировка IE () стабильна.
источник
Array.sort
; см этот вопрос .После еще нескольких исследований для Mozilla / Firefox оказалось, что Array.sort () использует mergesort. Смотрите код здесь .
источник
Я думаю, это будет зависеть от того, какую реализацию браузера вы используете.
У каждого типа браузера есть своя реализация движка javascript, так что это зависит. Вы можете проверить репозитории исходного кода для Mozilla и Webkit / Khtml для разных реализаций.
IE, однако, является закрытым исходным кодом, поэтому вам, возможно, придется спросить кого-то в Microsoft.
источник
Начиная с V8 v7.0 / Chrome 70, V8 использует TimSort , алгоритм сортировки Python. Chrome 70 был выпущен 13 сентября 2018 года.
См. Сообщение в блоге разработчика V8 для получения подробной информации об этом изменении. Вы также можете прочитать исходный код или патч 1186801 .
источник
Функция JavaScript Array.sort () имеет внутренние механизмы для выбора лучшего алгоритма сортировки (QuickSort, MergeSort и т. Д.) На основе типа данных элементов массива.
источник
попробуйте это с быстрой сортировкой:
источник