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

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

  • автор:

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

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

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

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

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

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

12243 / 7373 / 1734

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

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

Лучший ответ

Сообщение было отмечено 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 )

Отслеживать
32k 19 19 золотых знаков 79 79 серебряных знаков 105 105 бронзовых знаков
задан 18 ноя 2015 в 17:46
Radzhab 654654 Radzhab 654654
369 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,757 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()); 

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

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

Сортировка массива по возрастанию и убыванию
Сортируется только по возрастанию, где ошибка в коде? #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 коду по возрастанию или убыванию (на свой лад), произвести защиту.

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

Имеется односвязный список. Сделал функции создания и удаления элементов в списке. Проблемы с функцией сортировки односвязного списка по возрастанию.

#include «stdafx.h»
#include
#include
#include
#include

using namespace std ;

struct Node //Структура являющаяся звеном списка
<
int x ; //Значение x будет передаваться в список
Node * Next ; //Указатели на адреса следующего элемента списка
> ;

class List //Создаем тип данных Список
<
Node * Head, * Tail ; //Указатели на адреса начала списка и его конца
public :
List ( ) : Head ( NULL ) , Tail ( NULL ) < >; //Инициализируем адреса как пустые
~List ( ) ; //Деструктор
void Show ( ) ; //Функция отображения списка на экране
void Add ( int x ) ; //Функция добавления элемента в список
void Sort ( int x ) ; //Функция сортировки элементов в списке
void Delete ( int x ) ; //Функция удаления элемента в списке
> ;

List :: ~List ( ) //Деструктор
<
while ( Head ) //Пока по адресу на начало списка что-то есть
<
Tail = Head — > Next ; //Резервная копия адреса следующего звена списка
delete Head ; //Очистка памяти от первого звена
Head = Tail ; //Смена адреса начала на адрес следующего элемента
>
>

void List :: Add ( int x )
<
Node * temp = new Node ; //Выделение памяти под новый элемент структуры
temp — > Next = NULL ; //Указываем, что изначально по следующему адресу пусто
temp — > x = x ; //Записываем значение в структуру

if ( Head ! = NULL ) //Если список не пуст
<
Tail — > Next = temp ; //Указываем адрес следующего за хвостом элемента
Tail = temp ; //Меняем адрес хвоста
>
else //Если список пустой
<
Head = Tail = temp ; //Голова=Хвост=тот элемент, что сейчас добавили
>
>

void List :: Show ( )
<
if ( Head == NULL )
printf ( «List is NULL» ) ;
//ВЫВОДИМ СПИСОК С НАЧАЛА
Node * temp = Head ; //Временно указываем на адрес первого элемента
while ( temp ! = NULL ) //Пока не встретим пустое значение
<
cout x temp = temp — > Next ; //Смена адреса на адрес следующего элемента
>
cout >

void List :: Delete ( int x )
<
int number = 0 ;
Node * temp = Head ;
Node * tempL = Head ;
Node * tempR = Head ;
while ( number < x - 1 ) //Пока не встретим пустое значение
<
number ++ ;
temp = temp — > Next ; //Смена адреса на адрес следующего элемента
>
tempR = temp — > Next ;

void List :: Sort ( int x )

int main ( )
<
setlocale ( LC_ALL, «Russian» ) ;
List lst ; //Объявляем переменную, тип которой есть список

system ( «cls» ) ;
printf ( «n Односвязный список. Функции: создание, удаление, сортировка.» ) ;
printf ( «n Список возможных действий: » ) ;
printf ( «n 1 — Добавление элемента в список» ) ;
printf ( «n 2 — Удаление элемента из списка» ) ;
printf ( «n 3 — Сортировка элементов в списке» ) ;
printf ( «n 4 — Вывод списка» ) ;
printf ( «n 0 — Выходn» ) ;
int choise = 228 , buf ;
while ( 1 )
<
printf ( «Выберите действие: » ) ;
scanf_s ( «%d» , & choise ) ;
if ( choise == 1 )
<
printf ( «Введите элемент, который будет добавлен в список: » ) ;
scanf_s ( «%d» , & buf ) ;
lst. Add ( buf ) ;
>
else if ( choise == 2 )
<
printf ( «Введите номер элемента списка, который хотите удалить: » ) ;
scanf_s ( «%d» , & buf ) ;
lst. Delete ( buf ) ;
>
else if ( choise == 3 )
lst. Sort ( buf ) ;
else if ( choise == 4 )
lst. Show ( ) ;
else if ( choise == 0 )
exit ( 0 ) ;
else
printf ( «Неверный выбор. Повторите попыткуn» ) ;
>
system ( «PAUSE» ) ;
>

Подскажите пожалуйста какой код необходим в

void List :: Sort ( int x )

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

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