Случайная сортировка массива на JavaScript

от автора

Для случайной сортировки массива можно использовать стандартную конструкцию

array.sort(function() { return Math.random() - 0.5 })

Вроде бы все правильно. Массив должен сортироваться случайным образом. Но это не совсем так. Иногда такой способ вызывает исключение «нарушены условия контракта».

Разбираемся в причинах.

Оказывается сортировка вызывается неоднократно и для одних и тех же пар элементов будут разные значения сортировки. Это может привести к повторным перемещениям элементов в списке сортировки. Естественно это сделает сортировку более длительной. Скорее всего внутри сортировщика находится защита от длительной сортировки. Вот мы и получаем такое исключение.

Как стоит производить сортировку?

Метод следующий. Сразу генерим массив случайных чисел рядом и сортируем свой массив как этот сгенерированый. Код реализации такой.

array .map(function(elem,index) { return [elem, Math.random()]}) .sort(function(a,b){ return a[1] - b[1]}) .map(function(elem){return elem[0]})


ссылка на оригинал статьи https://habr.com/ru/post/463501/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *