Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Как работает сортировка массива по возрастанию

Как работает сортировка массива по возрастанию

Запланировано Прикреплена Закрыта Перенесена JavaScript
javascript
1 Сообщения 1 Постеры 13 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    js
    написал отредактировано
    #1

    Вы когда ни будь задумывались как работает сортировка массива изнутри? Мы все давным давно привыкли и даже не задумываемся над такими вещами, но я все же хочу осветить работу нашу любимого JavaScript под капотом.

    Начнем разбираться, у нас есть массив цифры и нам нужно его отсортировать по возрастанию, как мы будем это делать? Конечно же используем .sort() :

    const nums = [40, 100, 1, 5, 25, 10];
    nums.sort((a, b) => a - b);
    console.log(nums); // [1, 5, 10, 25, 40, 100]
    

    Казалось бы вот и все массив отсортирован по возрастанию, но как же это работает изнутри и как функция .sort() понимает с чем ей необходимо работать.

    В методе sort() аргументы a и b - это два конкретных элемента массива, которые JavaScript берет для попарного сравнения в текущий момент работы алгоритма сортировки.

    Алгоритм сортировки «под капотом» (часто QuickSort или Timsort, в зависимости от браузера) проходит по массиву и постоянно задает вопрос: «Кто из этих двоих должен стоять раньше?».

    Как это работает в (a, b) => a - b

    Функция должна вернуть число. Знак этого числа (плюс, минус или ноль) говорит сортировщику, что делать с a и b.

    Результат выражения a - b Значение Действие сортировщика
    Отрицательное (< 0) a меньше b Оставляет a перед b (индекс a < индекса b)
    Положительное (> 0) a больше b Меняет их местами, ставит b перед a
    Ноль (0) a равно b Оставляет их порядок без изменений (в стабильных сортировках)

    А теперь на пальцах:
    Допустим, JS сравнивает пару 100 и 5:

    1. a = 100, b = 5.
    2. Считаем a - b: 100 - 5 = 95.
    3. Результат 95 (положительное число).
    4. Вывод: «Ага, a больше, значит, он “тяжелее” и должен уйти вправо (в конец)». 5 встанет перед 100.

    Если сравнивает 5 и 25:

    1. a = 5, b = 25.
    2. Считаем a - b: 5 - 25 = -20.
    3. Результат -20 (отрицательное число).
    4. Вывод: «a меньше, он “легче”, пусть стоит слева (в начале)». Порядок сохраняется.

    Таким образом, вычитание - это просто математический трюк, чтобы быстро получить нужное отрицательное или положительное число. Вот так вот и работает сортировка по возрастанию и убыванию.
    Кстати если нужна сортировка по убыванию нужно поменять местами a и b вот так:

    nums.sort((a, b) => b - a);
    
    1 ответ Последний ответ
    0

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2025 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы