<MyRusakov.ru />

Программирование на C# с Нуля до Гуру

Программирование на C# с Нуля до Гуру

Данный курс научит Вас программировать на языке C#, который является одним из самых востребованных языков программирования в мире. Курс состоит из 7 разделов, в которых Вы с нуля освоите этот язык и сможете создавать самые разные программы для самых разных задач любой сложности.

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

Помимо самого курса Вас ждут ещё 3 бесплатных ценных Бонуса: «Технология Windows Presentation Foundation», «Создание библиотеки классов» и «Правильная работа со справочником».

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Сортировка массива на JS

Сортировка массива на JS

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

Сортировка строк в массиве по алфавиту?

На первый взгляд может показаться, что строки сортируются в алфавитном порядке, но на самом деле это не так. Они сортируются по значениям ASCII-коду и сравниваются по первому символу. Что будет больше "b" или "aaaaa"? Больше будет "b", поскольку в сравнении участвуют только первые символы, напиши хоть 10 раз букву "a", но код символа "b" больше кода символа "a".

Что будет, когда у сравниваемых элементов одинаковые первые символы? В таком случае, сравнение будет идти по вторым символам. Если код символа "c" больше кода символа "b", значит буква "с" больше буквы "b".

let arr2 = ['ac', 'ab', 'aa'];
arr2.sort();
console.log(arr2); // ["aa", "ab", "ac"]

Сортировка чисел массива по возрастанию

Обратите внимание на важную деталь - метод sort изменяет текущий массив и кроме того возвращает уже отсортированный массив. Иными словами, оригинал не отсортированного массива после отработки метода sort, больше не сущестует.

Отсортируем числовой массив по возрастанию и результат выведем в консоль. Мы видим, что массив отсортирован неверно. Если знать, как метод sort сравнивает между собой числа, то все встанет на свои места. А сравнивает он их в лексикографическом порядке. Это значит, что числа сравниваются как строки, а не как числа. Они сравниваются по первому символу. У чисел 1, 14, 144 первый символ "1", раз по первому символу они равны, то борьба переходит между следующими символами - "14" больше "1" и меньше чем "144".

let arr = [6, 4, 14, 5, 144, 9, 1];
arr.sort();
console.log(arr); // неправильная сортировка [1, 14, 144, 4, 5, 6, 9]

Алгоритм для сортировки чисел по возрастанию

Как выйти из этого положения и сортировать числа правильно? Нужна задать свои правила, каким образом сравнивать между собой числа, написав небольшую функцию. Метод sort принимает функцию с двумя параметрами, в которые попадают пары чисел. Два числа сравниваются между собой по формуле a-b. Возьмем первую пару "6, 4" и подставим их в формулу "6-4=2", если результат положительный, то значит "6 > 4". Тогда меняем их местами в массиве "4, 6". Дальше переходим ко второй паре "4, 14", делаем вычисления "4-14=-10". Отрицательный результат, говорит нам о том, что "4 < 14", числа остаются на месте. Сравнивание будет происходить до тех пор, пока у всех пар результат вычитания, даст отрицательный результат.

const array = [6, 4, 14, 5, 144, 9, 1];
const bubble = array.sort((a, b) => a-b);
console.log(bubble); // правильная сортировка [1, 4, 5, 6, 9, 14, 144]

Рассмотренный выше алгоритм сортировки, называется "Сортировка пузырьком - Bubble sort". При каждом проходе два числа пары сравниваются между собой, чтобы определить нужна перестановка или нет. На втором проходе по массиву самое большое число оказалось последним в массиве. Это похоже на всплытие "пузырька" снизу вверх. Потребуется сделать много проходов по массиву, пока числа не прекратят перестановку. Если числа больше не переставляются, значит массив отсортирован.


6, 4, 14, 5, 144, 9, 1 // 1-ый проход
4, 6, 5, 14, 9, 1, 144 // 2-ой проход
4, 5, 6, 9, 14, 1, 144
4, 5, 6, 9, 1, 14, 144
4, 5, 6, 1, 9, 14, 144
4, 5, 1, 6, 9, 14, 144
4, 1, 5, 6, 9, 14, 144 // 7-ой проход
1, 4, 5, 6, 9, 14, 144 // массив отсортирован


Сортировка чисел в порядке убыванию


const array2 = [6, 4, 14, 5, 144, 9, 1];
const newArray2 = array2.sort((a, b) => b-a); // меняем местами "a" и "b"
console.log(newArray2); // [144, 14, 9, 6, 5, 4, 1]

Сортировка массива объектов

Внутри массива находятся объекты. С помощью метода sort можно сделать сортировку по ключу age. Добавим название нужного поля к параметрам "a, b".

const array3 = [
    {age: 15, name: 'Arina'},
    {age: 17, name: 'Misha'},
    {age: 12, name: 'Lena'},
]; const newArray3 = array3.sort((a, b) => a.age-b.age);
console.log(array3);

Сортировка массива на JS.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.