Как на самом деле работает эта функция сортировки массивов? - PullRequest
0 голосов
/ 08 сентября 2018

Я работал над некоторыми проблемами кодирования для практики и наткнулся на одну, которая поставила меня в тупик. Читая статью об этом, я наткнулся на ответ, который я не могу понять. Задача состояла в том, чтобы создать функцию, которая сортирует массив целых чисел в порядке возрастания и возвращает его. Функция выглядит следующим образом:

function sortAscending(arr) {
    return arr.sort(function(a, b) {
        return a - b;
    });
}

Я не могу понять, как на самом деле работает сортировка с использованием функции сравнения return a - b. Если у меня есть массив случайных целых чисел, и я беру калькулятор и применяю эту арифметическую операцию к каждому, это не приводит к массиву, отсортированному в порядке возрастания, это приводит к совершенно другому массиву. Это говорит мне о том, что я совершенно не понимаю, как это работает. Кто-нибудь хочет объяснить это кому-то, у кого практически нет компьютерных знаний?

1 Ответ

0 голосов
/ 08 сентября 2018

Ваша функция сравнения (a,b) => a-b сообщает функции sort, как сортировать. Другими словами, он говорит sort, как сравнивать два значения одновременно. Внутренне sort применяет вашу функцию сравнения несколько раз, пока не получит отсортированные результаты.

если возвращаемое значение меньше нуля, a следует отсортировать по индексу, меньшему чем b (поэтому a помещается в массив до b)

Если возвращаемое значение больше нуля, a следует отсортировать по индексу, большему чем b.

Если возвращаемое значение равно нулю, то порядок должен остаться без изменений.

Любое значение undefined (в a или b) сортируется до конца массива без фактического вызова функции сравнения.

Это хорошо задокументировано MDN

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