Как отсортировать лист по возрастанию c
Перейти к содержимому

Как отсортировать лист по возрастанию c

  • автор:

сортировка списка по возрастанию(убыванию)

Author24 — интернет-сервис помощи студентам

Сортировка пузырьком по убыванию и возрастанию
Подскажите можно ли в одной программе на С++ разделить сортировку на возрастание и убывание.

Сортировка массива по возрастанию и убыванию
Сортируется только по возрастанию, где ошибка в коде? #include <iostream> using namespace.

Сортировка массива по возрастанию\убыванию
Доброго времени суток всем! Ребята, выручайте, до дедлайна осталось 5 часов, а я так и не пойму, в.

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

51 / 149 / 33
Регистрация: 29.06.2019
Сообщений: 1,428

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
#include #include using namespace std; template typename T, typename. Args> listT> sort(const T& first, Args. args) { listT> result{first, args. }; result.sort(); return result; } int main(int argc, const char *argv[]) { std::listdouble> numbers = { 0.1,9,1,2,8,4,6 }; //numbers.sort(); numbers.sort(std::lessint>()); for (double n : numbers) { std::cout   <'\n'; } std::cout  <"=============="  <'\n'; numbers.sort(std::greaterint>()); for (double n : numbers) { std::cout   <'\n'; } return 0; }

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

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

Сортировка вставками: четные по возрастанию, потом нечетные по убыванию
Есть вот такой код. С помощью сортировки вставками программа сортирует элементы массива: сначала.

Сортировка четных строк матрицы по возрастанию, а нечетных — по убыванию
Здравствуйте! Есть задача: отсортировать чётные строки массива А по возрастанию, а нечётные по.

Сортировка: сначала нечетные по возрастанию затем четные по убыванию
Как сделать так что б сначала нечетные по возрастанию затем парные по убыванию (это все в рандоме и.

Сортировка первой половины массива по возрастанию, а второй по убыванию
Здравствуйте, помогите пожалуйста. Дан массив А, состоящий из 20 целых чисел. Отсортируйте первую.

Сортировка символов по ASCII коду по возрастанию или убыванию
сортировка символов по ASCII коду по возрастанию или убыванию (на свой лад), произвести защиту.

Или воспользуйтесь поиском по форуму:

Как отсортировать лист по возрастанию c

Для сортировки набора данных в LINQ можно применять оператор orderby :

int[] numbers = < 3, 12, 4, 10>; var orderedNumbers = from i in numbers orderby i select i; foreach (int i in orderedNumbers) Console.WriteLine(i);

Оператор orderby принимает критерий сортировки. В данном случае в качестве критерия выступает само число. Результат работы программы:

3 4 10 12

Если числа сортируются стандартным образом, как принято в математике, то строки сортируются исходя из алфавитного порядка:

string[] people = < "Tom", "Bob", "Sam" >; var orderedPeople = from p in people orderby p select p; foreach (var p in orderedPeople) Console.WriteLine(p); // Bob Sam Tom

Вместо оператора orderby можно применять метод расширения OrderBy() :

OrderBy (Func keySelector) OrderBy (Func keySelector, IComparer? comparer);

Первая версия метода получает делегат, который через параметр получает элемент коллекции и который возвращает значение, применяемое для сортировки. Вторая версия позволяет также задать принцип сортировки через реализацию интерфейса IComparer.

Перепишем предыдущие два примера с помощью метода OrderBy:

int[] numbers = < 3, 12, 4, 10 >; var orderedNumbers = numbers.OrderBy(n=>n); foreach (int i in orderedNumbers) Console.WriteLine(i); string[] people = < "Tom", "Bob", "Sam" >; var orderedPeople = people.OrderBy(p=>p); foreach (var p in orderedPeople) Console.WriteLine(p);

Сортировка сложных объектов

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

var people = new List < new Person("Tom", 37), new Person("Sam", 28), new Person("Tom", 22), new Person("Bob", 41), >; // с помощью оператора orderby var sortedPeople1 = from p in people orderby p.Name select p; foreach (var p in sortedPeople1) Console.WriteLine($" - "); // с помощью метода OrderBy var sortedPeople2 = people.OrderBy(p => p.Name); foreach (var p in sortedPeople2) Console.WriteLine($" - "); record class Person(string Name, int Age);

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

По умолчанию оператор orderby и метод OrderBy производят сортировку по возрастанию. С помощью ключевых слов ascending (сортировка по возрастанию) и descending (сортировка по убыванию) для оператора orderby можно явным образом указать направление сортировки. Например, отсортируем массив чисел по убыванию:

int[] numbers = < 3, 12, 4, 10 >; var orderedNumbers = from i in numbers orderby i descending select i; foreach (int i in orderedNumbers) Console.WriteLine(i); // 12 10 4 3

Для сортировки по убыванию можно применять метод OrderByDescending() , который работает аналогично OrderBy за исключением направления сортировки:

int[] numbers = < 3, 12, 4, 10 >; var orderedNumbers = numbers.OrderByDescending(n => n); foreach (int i in orderedNumbers) Console.WriteLine(i); // 12 10 4 3

Множественные критерии сортировки

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

var people = new List < new Person("Tom", 37), new Person("Sam", 28), new Person("Tom", 22), new Person("Bob", 41), >; // с помощью оператора orderby var sortedPeople1 = from p in people orderby p.Name, p.Age select p; foreach (var p in sortedPeople1) Console.WriteLine($" - ");
Bob - 41 Sam - 28 Tom - 22 Tom - 37

Для разных критериев сортировки можно установить направление:

// с помощью оператора orderby var sortedPeople1 = from p in people orderby p.Name, p.Age descending // сортировка по возрасту по убыванию select p;

С помощью методов расширения то же самое можно сделать через метод ThenBy() (для сортировки по возрастанию) и ThenByDescending() (для сортировки по убыванию):

var sortedPeople2 = people.OrderBy(p => p.Name).ThenByDescending(p=>p.Age);

Результат будет аналогичен предыдущему.

Переопределение критерия сортировки

С помощью реализации IComparer мы можем переопределить критерии сортировки, если они нас не устраивают. Например, строки по умолчанию сортируются в алфавитном порядке. Но что, если мы хотим сортировать строки исходя из их длины? Решим данную задачу:

string[] people = new[]; var sortedPeople = people.OrderBy(p => p, new CustomStringComparer()); foreach (var p in sortedPeople) Console.WriteLine(p); // сравнение по длине строки class CustomStringComparer : IComparer  < public int Compare(string? x, string? y) < int xLength = x?.Length ?? 0; // если x равно null, то длина 0 int yLength = y?.Length ?? 0; return xLength - yLength; >>

Интерфейс IComparer типизируется типов сортируемых данных (в данном случае типом String). Для реализации этого интерфейса необходимо определить метод Compare. Он возвращает число: если первый параметр больше второго, то число больше 0, если меньше — то число меньше 0. Если оба параметра равны, то возвращается 0.

В данном случае, если параметр равен null, будем считать что длина строки равна 0. И с помощью разницы длин строк из обоих параметров определяем, какой из них больше.

Tom Sam Kate Mike Alice

Функция: сортировка списка по возрастанию

Author24 — интернет-сервис помощи студентам

Сортировка списка по возрастанию
Нужно описать функцию, которая для заданного списка проверяет, является ли он отсортированным по.

Сортировка многоуровневого списка по возрастанию
Нужно отсортировать список чисел по возрастанию. Список может быть многоуровневым. Тогда вес.

Сортировка списка с множеством координат по возрастанию вдоль оси Х
Требуется отсортировать список с координатами по возрастанию по оси Х (от меньшей к большей), кто.

Функция: сортировка по возрастанию одномерного динамического массива
Составьте и оформите в виде отдельной функции сортировку по возрастанию одномерного динамического.

Эксперт PythonЭксперт JavaЭксперт CЭксперт С++

12265 / 7430 / 1740

Регистрация: 25.07.2009

Сообщений: 13,639

Лучший ответ

Сообщение было отмечено Symonenko как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
struct list * find_min(struct list * head) { struct list * next; for ( next = head->nextPoint; next; next = next->nextPoint ) if ( next->data  head->data ) head = next; return head; } void sort_ascendant(struct list * list) { for ( ; list; list = list->nextPoint ) { struct list * minPtr = find_min(list); if ( minPtr != list ) { int tmp = list->data; list->data = minPtr->data; minPtr->data = tmp; } } }

Как отсортировать данные в List, чтобы строки с числами были по возрастанию?

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

List list = new List(); DirectoryInfo d = new DirectoryInfo(Directory.GetCurrentDirectory()); FileInfo[] Files = d.GetFiles("*.jpg"); //Getting Text files string str = ""; foreach(FileInfo file in Files )

Отслеживать
32.1k 19 19 золотых знаков 79 79 серебряных знаков 106 106 бронзовых знаков
задан 18 ноя 2015 в 17:46
Radzhab 654654 Radzhab 654654
379 1 1 золотой знак 3 3 серебряных знака 19 19 бронзовых знаков
Поясните, чем вас не устроила сортировка строк из коробки?
18 ноя 2015 в 17:49
18 ноя 2015 в 17:53

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

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

list.Sort((x, y) => < int ix, iy; return int.TryParse(x, out ix) && int.TryParse(y, out iy) ? ix.CompareTo(iy) : string.Compare(x, y); >); 
public class NaturalSortComparer : IComparer, IDisposable < private bool isAscending; public NaturalSortComparer(bool inAscendingOrder = true) < this.isAscending = inAscendingOrder; >#region IComparer Members public int Compare(string x, string y) < throw new NotImplementedException(); >#endregion #region IComparer Members int IComparer.Compare(string x, string y) < if (x == y) return 0; string[] x1, y1; if (!table.TryGetValue(x, out x1)) < x1 = Regex.Split(x.Replace(" ", ""), "([0-9]+)"); table.Add(x, x1); >if (!table.TryGetValue(y, out y1)) < y1 = Regex.Split(y.Replace(" ", ""), "([0-9]+)"); table.Add(y, y1); >int returnVal; for (int i = 0; i < x1.Length && i < y1.Length; i++) < if (x1[i] != y1[i]) < returnVal = PartCompare(x1[i], y1[i]); return isAscending ? returnVal : -returnVal; >> if (y1.Length > x1.Length) < returnVal = 1; >else if (x1.Length > y1.Length) < returnVal = -1; >else < returnVal = 0; >return isAscending ? returnVal : -returnVal; > private static int PartCompare(string left, string right) < int x, y; if (!int.TryParse(left, out x)) return left.CompareTo(right); if (!int.TryParse(right, out y)) return left.CompareTo(right); return x.CompareTo(y); >#endregion private Dictionary table = new Dictionary(); public void Dispose() < table.Clear(); table = null; >> 
list.OrderBy(item => item, new NaturalSortComparer()).ToList(); 

Отслеживать
ответ дан 18 ноя 2015 в 17:59
Мстислав Павлов Мстислав Павлов
6,767 2 2 золотых знака 18 18 серебряных знаков 40 40 бронзовых знаков

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

[SuppressUnmanagedCodeSecurity] internal static class NativeMethods < [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] public static extern int StrCmpLogicalW(string psz1, string psz2); >public sealed class NaturalStringComparer : IComparer  < public int Compare(string a, string b) < return NativeMethods.StrCmpLogicalW(a, b); >> public sealed class NaturalFileInfoNameComparer : IComparer  < public int Compare(FileInfo a, FileInfo b) < return NativeMethods.StrCmpLogicalW(a.Name, b.Name); >> 

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

Array.Sort(Files, new NaturalFileInfoNameComparer()); 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *