list sort c по убыванию

Из этого урока вы узнаете о методе сортировки списка Python. Вы увидите, как использовать его со списками с помощью примеров.

Синтаксис, используемый в следующем разделе, предназначен для Python 3. Вы можете изменить его на любые другие версии Python.

Метод sort выполняет сортировку элементов списка в восходящем или нисходящем направлении. Его синтаксис выглядит следующим образом:

Когда метод sort() вызывается без аргументов, по умолчанию он сортируется в порядке возрастания. У него нет возвращаемого значения.

Он просто возвращается к следующей строке, не возвращая никакого вывода.

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

Как работает метод sort

Когда мы вызываем этот метод без аргументов, он перебирает элементы списка в цикле и переставляет их в порядке возрастания.

Если в качестве аргумента указать «reverse = true», список будет отсортирован в порядке убывания.

Основной параметр — это шаги, которые должен пройти метод при сортировке списка элементов. Значение, данное ключу, может быть функцией или простым вычислением и т.д.

Есть список, в который мы грузим имена файлов из текущей директории

Пример файлов — 0.jpg , 1.jpg , 2.jpg и т.д. Как отсортировать список по возрастанию? Одно дело если бы там были цифры. А когда в list содержит строковые данные-они сортируются некорректно. 0.jpg,1.jpg и 10.jpg

2 ответа 2

Насколько я понял из вашего описания, вас интересует «естественная» сортировка (natural sort), которая правильно отсортирует числа в строковом виде, например, «1, 2, 10, 20» вместо «1, 10, 2, 20». В Windows для этого есть встроенная функция StrCmpLogical . Чтобы воспользоваться ей для сортировки строк и файлов, вам понадобится реализовать интерфейс IComparer .

Ну а дальше эти компареры можно передавать в любую сортирующую функцию. Так как у вас массив, то можно так:

Можно попробовать так:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# сортировка list или задайте свой вопрос.

Связанные

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.11.15.35459

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Сортировка List в C#

Часто приходится создавать списки List со ссылочными типами данных, такими как классы или массивы. Другая же необходимая задача – это сортировка списков. В языке C# у List есть метод, позволяющий сортировать список. Когда список состоит из примитивных типов данных – методом Sort пользоваться легко, но если данные представляют собой какую-либо структуру или класс, то всё не так очевидно. Рассмотрим в данной статье сортировку List в C#.

Создание списка List для сортировки

Допустим нам необходимо хранить данные пользователей: их имя и год рождения. Для этого создадим в языке программирования C# список List, элементами которого, является строковый массив. Имя переменной: people.

Добавим в него четыре элемента с информацией о пользователях:

Соответственно каждый элемент списка List содержит одномерный строковый массив из двух элементов с именем и годом рождения человека.

Вспомогательный метод для вывода списка в консоль

Напишем также метод OutputList, который выводит все элементы коллекции на экран в консоль.

Аргументы метода: list – сам список, который нужно вывести в консоль и label – строка с информацией (она будет выведена перед списком).

Выведем на экран текущее содержимое списка people (запустим программу комбинацией клавиш Ctrl + F5):

Сортировка List в языке C#

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

Данный метод называется Compare и он должен находиться в отдельно созданном классе, реализующем интерфейс IComparer<>.

Первый пример сортировки списка

Сначала выполним сортировку по такому принципу: отсортируем список people по возрастанию длин имён людей.

Для этого создадим класс с именем NameComparer (имя может быть любым допустимым), который реализует интерфейс IComparer . Тип string[] мы указываем, поскольку элемент списка в нашем случаем – это строковый массив.

В классе обязательно должен содержаться метод Compare, в котором описано как сравнивать два объекта (два элемента списка). В нашем случае эти объекты имеют имена o1 и o2.

Сортировка по возрастанию

Если первый объект по нужному признаку больше второго объекта, то следует возвратить единицу. Если меньше, то минус единицу.

Если объекты равны, то возвращаем ноль.

Для сортировки по убыванию поменяйте местами 1 и -1.

В данном примере мы сравниваем длину строк первых (нулевых) элементов двух массивов, поскольку в первом элементе хранится имя пользователя.

Отсортируем список people. Для этого создадим экземпляр класса NameComparer и вызовем у списка метод Sort, передав в него в качестве аргумента экземпляр созданного класса. После выведем список в консоль.

Второй пример сортировки списка

Рассмотрим еще один пример сортировки. На этот раз отсортируем список people по году рождения людей (от старших к младшим). Для этого создадим класс YearComparer.

Поскольку у нас год хранится в виде строки, сначала её необходимо конвертировать в число. Делается это с помощью метода Convert.ToInt32() [строки 5 и 6].

Отсортируем List по годам рождения пользователей и выведем его на экран.

Скачать исходник программы из данного урока:

Принцип работы метода Sort в списках List

Следует отдельно сказать о том, какие алгоритмы сортировки применяются в методе Sort().

  • Если в списке менее 16 элементов, то сортировка будет производиться методом вставок.
  • Если количество элементов в списке (обозначим буквой N) превышает число 2 * Log(N), то используется алгоритм пирамидальной сортировки.
  • Во всех остальных случаях используется алгоритм быстрой сортировки.

Сложность выполнения метода в среднем равна O(N * Log(N)). В худшем случае сортировка займёт O(N ^ 2) операций.

Также отметим, что метод Sort реализует так называемую нестрогую сортировку, то есть возможны случаи, когда порядок одинаковых элементов будет меняться.

Оцените статью
SoftLast
Добавить комментарий