Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
1

Ускорение сортировки строк

07.04.2017, 18:56. Показов 593. Ответов 13
Метки нет (Все метки)

Здравствуйте задача в следующем - сортировать строки по алфавиту. Есть код, но он работает очеень медленно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
var str = new List<string>();
str = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
for (int i = 0; i < str.Count - 1; ++i)
{
    if (str[i].CompareTo(str[i + 1]) > 0)
    {
        string b = str[i];
        str[i] = str[i+1];
        str[i+1] = b;
    }
}
textBox1.Clear();
foreach (string s in str) textBox1.Text += s.ToString() + Environment.NewLine;
Что можно сделать чтобы ускорить её в разы? Или как лучше реализовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2017, 18:56
Ответы с готовыми решениями:

Ускорение сортировки
Для решения этой задачи использую быструю сортировку, но при проверке массива из 10^6 элементов...

Ускорение обработки строк+запись в файл
Добрый всем день. Подскажие, пожалуйста, можно ли оптимизировать мой код для ускорения выполнения?...

Прочитать гигабайт текста в массив строк для сортировки
Использую такую строку кода: String s = File.ReadAllLines(&quot;1.txt&quot;, Encoding.Default); Но не...

Напишите процедуру сортировки строк в обратном алфавитном порядке
Задача:Напишите процедуру сортировки строк в обратном алфавитном порядке. Код : class Program...

13
Эксперт .NETАвтор FAQ
9856 / 4810 / 1731
Регистрация: 11.01.2015
Сообщений: 5,991
Записей в блоге: 34
07.04.2017, 21:14 2
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
Здравствуйте задача в следующем - сортировать строки по алфавиту. Есть код, но он работает очеень медленно
1) Ваш алгоритм не сортирует строки. Для сортировки пузырьком (ведь вы его пытаетесь сделать?) нужно два вложенных цикла.
2) Если нужно увеличить производительность, используйте более быстрые типы сортировки. Для начала - хотя бы обычный Array.Sort.
3) Ваше основное время тратится не на сортировку а вот в этом цикле:
C#
1
foreach (string s in str) textBox1.Text += s.ToString() + Environment.NewLine;
Сложение строк - очень затратная операция. Используйте StringBuilder.
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
08.04.2017, 08:27  [ТС] 3
Up...
0
Модератор
Эксперт .NET
5728 / 4628 / 2917
Регистрация: 20.04.2015
Сообщений: 8,269
08.04.2017, 12:09 4
Mr_Asdshka,
немного (раза в три) ускорит даже:
C#
13
foreach (string s in str) textBox1.AppendText(s + Environment.NewLine);
Ну а так затрудняюсь сказать во сколько:
C#
1
2
3
StringBuilder sb = new StringBuilder();
foreach (string s in str) sb.Append(s + Environment.NewLine);
textBox1.Text = sb.ToString();
Однако сортировки, как справедливо заметил Storm23, все равно нет.
Поэтому:
C#
1
2
3
4
5
6
7
var str = new List<string>();
str = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToList();
str = str.OrderBy(x => x).ToList();
textBox1.Clear();
StringBuilder sb = new StringBuilder();
foreach (string s in str) sb.Append(s + Environment.NewLine);
textBox1.Text = sb.ToString();
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
08.04.2017, 14:06  [ТС] 5
Цитата Сообщение от Даценд Посмотреть сообщение
Однако сортировки, как справедливо заметил Storm23, все равно нет.
Только это сортировка пузырьком, а не по алфавиту
0
Администратор
Эксперт .NET
13170 / 10726 / 4425
Регистрация: 17.03.2014
Сообщений: 21,624
Записей в блоге: 1
08.04.2017, 14:16 6
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
Только это сортировка пузырьком, а не по алфавиту
а) это недописанная сортировка пузырьком;
б) ты путаешь алгоритм сортировки с порядком сортировки.
0
Модератор
Эксперт .NET
5728 / 4628 / 2917
Регистрация: 20.04.2015
Сообщений: 8,269
08.04.2017, 14:23 7
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
Только это сортировка пузырьком, а не по алфавиту
Это как сравнить красное с мягким.
Пузырьком - это метод сортировки, а по алфавиту - критерий, в соответствии с которым выстраивается последовательность элементов.
В вашем коде никакой сортировки нет ибо одного цикла мало!
Вот сортировка методом Linq:
C#
3
str = str.OrderBy(x => x).ToList();
Можете сортировать методом Sort класса Array, но в этом случае понадобится массив:
C#
1
2
3
4
5
6
string[] str = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToArray();
Array.Sort(str);
textBox1.Clear();
StringBuilder sb = new StringBuilder();
foreach (string s in str) sb.Append(s + Environment.NewLine);
textBox1.Text = sb.ToString();
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
08.04.2017, 14:34  [ТС] 8
Цитата Сообщение от Даценд Посмотреть сообщение
В вашем коде никакой сортировки нет ибо одного цикла мало!
Окей. Но в моём коде 10 больше, чем 2.
Результат выполнения моего кода(Вот чего я добиваюсь, только это очень медленно):
C#
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Результат выполнения вашего кода:
C#
1
2
3
4
5
6
7
8
9
10
11
1
10
11
12
13
14
15
2
3
4
5
0
Модератор
Эксперт .NET
5728 / 4628 / 2917
Регистрация: 20.04.2015
Сообщений: 8,269
08.04.2017, 14:40 9
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
Но в моём коде 10 больше, чем 2.
Понимаете, что такое сортировка по алфавиту?
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
08.04.2017, 14:43  [ТС] 10
Цитата Сообщение от Даценд Посмотреть сообщение
Понимаете, что такое сортировка по алфавиту?
Хорошо. Я не правильно отписал желаемое. Мне нужно, чтобы программа меняла строки текстбокса так чтобы из:
"1 3 2 4 6 5 7 8 9 10 11..." получилось "1 2 3 4 5 6 7 8 9 10 11". То же самое касается и буквенных значений.
C#
1
2
3
4
П
Приве
Прибетик
Привет
Вот только программа делает это очень медленно
0
Модератор
Эксперт .NET
5728 / 4628 / 2917
Регистрация: 20.04.2015
Сообщений: 8,269
08.04.2017, 14:50 11
Mr_Asdshka,
Не самый быстрый компьютер сортирует 10000 строк за 120 мс способом:
C#
1
2
3
4
5
6
 string[] str = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).ToArray();
Array.Sort(str);
textBox1.Clear();
StringBuilder sb = new StringBuilder();
foreach (string s in str) sb.Append(s + Environment.NewLine);
textBox1.Text = sb.ToString();
Это медленно?
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
08.04.2017, 15:01  [ТС] 12
Цитата Сообщение от Даценд Посмотреть сообщение
Это медленно?
Этот код даёт неудовлетворительный результат. Я хочу, чтобы 10 было больше, чем 2. А от такой сортировки у меня сердце колит и член не стоит
C#
1
2
3
4
5
6
7
8
1
109000000
1090828
12381
123987123
2
20
258
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
10
11
12
13
14
15
16
17
18
19
2
20
3
4
5
6
7
8
9
Добавлено через 4 минуты
Ладно, спасибо большое. Закрывайте тему, сам разберусь "со своей потенцией"
0
Модератор
Эксперт .NET
5728 / 4628 / 2917
Регистрация: 20.04.2015
Сообщений: 8,269
08.04.2017, 15:07 13
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
Здравствуйте задача в следующем - сортировать строки по алфавиту.
Здесь не предполагается, что в строках будут одни цифры.
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
Я хочу, чтобы 10 было больше, чем 2.
Это сортировка не по алфавиту, а по значению.
Цитата Сообщение от Mr_Asdshka Посмотреть сообщение
сердце колит и член не стоит
Корвалол + виагра.
2
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 209
08.04.2017, 15:51  [ТС] 14
Цитата Сообщение от Даценд Посмотреть сообщение
Корвалол + виагра.
Лучший ответ)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2017, 15:51

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Почему-то возвращает исключение при сортировки пузырьком массива строк
Не понимаю в чем дело, просто переделал сортировку пузырьком под массив строк. Задание из Шилдта. ...

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

Пример быстрой сортировки массива строк и сортировки методом выбора
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк...

Ускорение покраски строк DataGrid
Здравствуйте! Есть функция раскраски строк DataGridView в соответствии с условием заполненности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.