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

Он не просил меня решить ее прямо сейчас, но я не мог не думать о том, как я могу это сделать.

Моей первой мыслью было использовать метод JavaScript sort(). Однако вот что случилось…

Это не сработало, потому что sort() обрабатывает целые числа, которые имеют одно и то же первое целое число (2 цифры или более), как если бы они шли следующими (см. порядок 1,10,100 выше).

Причина этого в том, что метод sort преобразует элементы в строки, затем сравнивая их последовательности значений кодовых единиц UTF-16. Например, в UTF-16 банан стоит перед вишней. В числовой сортировке 9 предшествует 80, но поскольку числа преобразуются в строки, 80 предшествует 9 в порядке Unicode.

Мы можем предоставить функцию сравнения для сортировки, чтобы обеспечить правильную сортировку чисел. Вот хороший подробный пример того, что делает функция сравнения:

Итак, давайте настроим нашу исходную функцию, обратите внимание: я использовал короткую стрелку для части compareFunction:

И вуаля! У нас есть отсортированный случайный массив целых чисел! Это, вероятно, не самый эффективный способ для очень длинного массива, нам придется заняться этим в другом посте.