С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 11.04.2024
Сообщений: 15
1

Напишите три различных алгоритма сортировки строк

06.05.2024, 09:35. Показов 4041. Ответов 42
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят, помогите пожалуйста решить задачу: Напишите три различных алгоритма сортировки строк: сортировку пузырьком, сортировку вставками и сортировку слиянием. Создайте программу, которая позволит пользователю выбрать один из алгоритмов и отсортировать введенные строки. Замерьте время выполнения сортировки для строк различной длины (10 символов, 100 символов, 1000 символов, 10000 символов). Постройте графики времени выполнения для каждого алгоритма в зависимости от длины строк. Сделайте выводы о временной сложности каждого алгоритма и их эффективности на различных входных данных.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2024, 09:35
Ответы с готовыми решениями:

Напишите три различных алгоритма сортировки строк
Помогите решить задачу: Напишите три различных алгоритма сортировки строк: сортировку пузырьком,...

Напишите приложение Java для сортировки массива из заданных целых чисел с использованием алгоритма сортировки слиянием
Напишите приложение Java для сортировки массива из заданных целых чисел с использованием алгоритма...

Реализовать три алгоритма внутренней сортировки
1)Реализовать три алгоритма внутренней сортировки (алгоритмы выбрать самостоятельно) 1.1 O(n)...

Реализовать четыре различных алгоритма сортировки одномерного целочисленного массива
Добрый день. Разработать программу на языке «Си», реализующую четыре различных алгоритма...

42
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 12:24 2
И в чем проблема?

Добавлено через 10 минут
Единственно я не помню для string нужен свой компаратор или нет.
Пузырёк:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        public static string[] BubbleSort(string[] Gbytes)
        {
            bool swapped = true;
            for (int i = 0; i < Gbytes.Length && swapped; i++)
            {
                swapped = false;
                for (int j = 0; j < Gbytes.Length - i - 1; j++)
                {
                    if (Gbytes[j] <= Gbytes[j + 1]) continue;
                    swapped = true;
                    string t = Gbytes[j + 1];
                    Gbytes[j + 1] = Gbytes[j];
                    Gbytes[j] = t;
                }
            }
            return Gbytes;
        }
0
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 13:17 3
belalugoci, а проверить что написал - не? Этот код даже не скомпилируется, т.к. в нем серьезная ошибка.
0
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 14:26 4
Цитата Сообщение от wizard41 Посмотреть сообщение
а проверить что написал - не?
зачем? я нигде не говорил что это окончательный вариант или законченное решение и даже написал про компаратор.

Цитата Сообщение от wizard41 Посмотреть сообщение
Этот код даже не скомпилируется
и? читайте это как псевдокод со всеми вытекающими.

Цитата Сообщение от wizard41 Посмотреть сообщение
в нем серьезная ошибка
серьёзная ошибка тут только в вас.
0
1288 / 867 / 258
Регистрация: 08.08.2014
Сообщений: 2,480
06.05.2024, 14:39 5
Цитата Сообщение от belalugoci Посмотреть сообщение
не помню для string нужен свой компаратор или нет
В случае C# сравнение будет выглядеть вот так:
C#
1
if (Gbytes[j].CompareTo(Gbytes[j + 1]) < 0) continue;
Ну или через статический метод 'string.Compare[Ordinal](....)', если требуется больше параметров сравнения указать.

Не по теме:

Ну и вы всё же использовали тэг 'C#', а не общий 'code', так что ожидается, что код хотя бы компилироваться будет под указанный язык.

0
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 14:40 6
Цитата Сообщение от belalugoci Посмотреть сообщение
даже написал про компаратор
компаратор тут не при чем. А вот сравнивать строки математическими операторами - глупость еще та.
0
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 14:41 7
2автор:
Цитата Сообщение от Iluxa_programne Посмотреть сообщение
три различных алгоритма сортировки строк
Цитата Сообщение от Iluxa_programne Посмотреть сообщение
(10 символов, 100 символов, 1000 символов, 10000 символов)
тут с условием проблема, нужна сортировка строк или символов строки? скорее всего речь про сортировку символов в строке, не заданы условия по вводу символов и условиям конвертации/поддержки кодировок. Если это абсолютно не важно, то я бы читал файлами в байтах и не возился бы со строками вовсе. График можно рисовать как в консоли так и на форме или просто рисовать в памяти и сохранять в BMP/PNG - условием это не оговорено. Выбор алгоритма можно сделать через Readkey и обработкой в цикле допустимых значений пока не будет введено верное.
Время можно смотреть через Stopwatch, но даже на 100 символах погрешность будет очень большой. Для современного компьютера 10 и 100 это всё еще синоним слова - мгновенно.
0
John Prick
06.05.2024, 14:55
  #8

Не по теме:

Мимо тёщиного дома я без шуток не хожу...

0
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 14:56 9
Цитата Сообщение от wizard41 Посмотреть сообщение
А вот сравнивать строки математическими операторами - глупость еще та.
C#
1
2
3
string a = "fuck";
string b = "you";
Console.WriteLine(a == b);
False

Странно, да?

Цитата Сообщение от kotelok Посмотреть сообщение
Ну и вы всё же использовали тэг 'C#', а не общий 'code', так что ожидается, что код хотя бы компилироваться будет под указанный язык.
Перед тем как мне такое писать предлагаю пройтись по всему форуму и сделать хотя бы половину кода компилируемым. Я уже писал подобного рода претензии к некоторым, на что не встретил понимания ни со стороны оппонентов и ни со стороны администрации. Так что ваши претензии скомкал и выбросил.

Я только опять не понял, в моих темах вы меня отправляли читать литературу по куда более сложным вопросам, а здесь вы почему-то решили что для автора исправление одной ошибки которую подсветит IDE будет нерешаемой задачей. Вы уж будьте последовательны.
0
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 15:00 10
Цитата Сообщение от belalugoci Посмотреть сообщение
Странно, да?
Что тут странного? То что вы не понимаете что такое "=="? Ничего странного тут нет, поэтому совет все еще в силе:
Цитата Сообщение от belalugoci Посмотреть сообщение
меня отправляли читать литературу
0
kotelok
06.05.2024, 15:14
  #11

Не по теме:

Цитата Сообщение от wizard41 Посмотреть сообщение
А вот сравнивать строки математическими операторами - глупость еще та
Ну так-то, в C# вообще нет какого-то жёсткого деления на типы операторов. Ну т.е. есть, например, некая условная группа под названием Arithmetic operators, но даже среди них есть, скажем, оператор '+', который вполне применим к строкам и в этом контексте уже не является арифметическим оператором, а используется для конкатенации строк, скрывая под собой какую-то особую логику.

Ну или перегруженные операторы '==' и '!=' для типа 'string'. Технически, можно ровно так же перегрузить и остальные операторы сравнения, если это вписывается в логику конкретного типа.

Так что для новичка в C#, по мне так, вполне предсказуема попытка сравнения строк подобным образом.

0
wizard41
06.05.2024, 15:19
  #12

Не по теме:

kotelok, тут скорее вопрос в том - какой смысл изначально закладывается в такие конструкции. Разумеется, что можно насоздавать своих вариаций с перегрузками и всем таким.
Но если уж показывать "новичкам" такое, то будь добр привести эти манипуляции, а иначе можно ожидать от таких же новичков следующего вопроса: "Студия подчеркивает вот эту строку... Что делать?".

0
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 15:36 13
Цитата Сообщение от wizard41 Посмотреть сообщение
поэтому совет все еще в силе
предлагаю начать с себя, ибо вы не понимаете основ, о чем вам доходчиво написал котелок.

Цитата Сообщение от wizard41 Посмотреть сообщение
тут скорее вопрос
тут нет такого вопроса, есть только то что ты опростоволосился.

Цитата Сообщение от wizard41 Посмотреть сообщение
Студия подчеркивает вот эту строку... Что делать?
Отправляй их читать книги, ты это умеешь делать профессионально.

Цитата Сообщение от wizard41 Посмотреть сообщение
Но если уж показывать "новичкам" такое
Всё куда проще, я взял код из своего проекта где фигурировал byte[] (Gbytes намекает) и заменил его на string.

Столько энергии потрачено на какую-то чушь, лучше бы автору уже код написали раз уж преисполнены такой заботой.
0
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 15:41 14
belalugoci, обычно, отвечающий предлагает рабочий вариант решения, а не заведомую ересь, которая даже не скомпилируется.
Цитата Сообщение от belalugoci Посмотреть сообщение
где фигурировал byte[]
Цитата Сообщение от belalugoci Посмотреть сообщение
и заменил его на string
и... упс! Не срослось что-то. Потому что нет понимания что делаешь. Лишь бы "в лужу пукнуть", а работает или нет - не важно.
0
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 16:17 15
Цитата Сообщение от wizard41 Посмотреть сообщение
обычно, отвечающий предлагает рабочий вариант решения, а не заведомую ересь
ну вы сами не следуете своему совету, так что предлагаю вам пройтись в пешее путешествие

Цитата Сообщение от wizard41 Посмотреть сообщение
и... упс! Не срослось что-то
а должно было именно сростись? я кинул сам алгоритм, он полностью рабочий, по вашему мнению тут все книжки уже начитались и всё знают, так что исправить код не проблема.

Цитата Сообщение от wizard41 Посмотреть сообщение
а работает или нет - не важно
реализация алгоритма работает, код легко правится, всё так же как и у вас с задачей про треугольник, ваше решение была неправильным, вам на это указали, вы спустя три страницы допетрили как правильно. С одной разницей, вы там спорили до усеру, что у вас всё правильно, а я не спорю, я лишь отмечаю, что для данной темы точность реализации пузырька в моем коде ни имеет никакого значения.
0
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 16:42 16
Цитата Сообщение от belalugoci Посмотреть сообщение
ваше решение была неправильным, вам на это указали, вы спустя три страницы допетрили как правильно
если бы вы более внимательно читали ту ветку с самого начала, то возможно, до вас бы дошло, что я с самого начала указывал на множественную вариативность решения той задачи. Это видно таким как я - сразу. Но чтобы другой человек, высказывающийся в той же теме дошел до этого понимания "самостоятельно", я поддержал его идеи и ждал, когда же это понимание придет. И в отличие от вас, он оказался на самом деле думающим оппонентом. А не пустышкой с никчемной болтовней.
Цитата Сообщение от belalugoci Посмотреть сообщение
что у вас всё правильно
Именно так и было, на том этапе.

Добавлено через 3 минуты
belalugoci, что же касательно этого топика - задачу вы не решили, предложили изначально ошибочный вариант, даже не удосужившись его проверить на сборку. Для чего? Вам на это указали, но зачем изменять своим привычкам? Надо сразу кидаться слюнями на всех.
0
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
06.05.2024, 17:54 17
Цитата Сообщение от wizard41 Посмотреть сообщение
я с самого начала указывал на множественную вариативность решения той задачи
ну а я сразу давал псевдокод реализации алгоритма, в чем разница-то? или у вас есть право иметь мнение и не перед кем не оправдываться, а я лох по жизни и кому-то что-то всегда должен?

Цитата Сообщение от wizard41 Посмотреть сообщение
задачу вы не решили
А я её решал?

Цитата Сообщение от wizard41 Посмотреть сообщение
предложили изначально ошибочный вариант
И в чем он ошибочный? Я понимаю что код с ошибками и не компилируется, как бы кто спорил бы, но в чем ошибочность предложенного метода?

Цитата Сообщение от wizard41 Посмотреть сообщение
даже не удосужившись его проверить на сборку
А когда наступил момент что проверка кода на работоспособность стала обязанностью?

Цитата Сообщение от wizard41 Посмотреть сообщение
Для чего?
Я общаюсь с автором топика, а не с вами, претензии автора я буду рассматривать, а с вашими претензиями я вам предлагаю пройтись.

Цитата Сообщение от wizard41 Посмотреть сообщение
Надо сразу кидаться слюнями на всех
Я пока вижу что я один тут вообще хоть что-то пишу автору топика, а вот у вас подгорает чего-то и хочется пообщаться видимо от нереализованных каких-то проблем. Башку лечите.
0
Любознательный
6703 / 1965 / 336
Регистрация: 10.03.2016
Сообщений: 4,552
06.05.2024, 18:32 18
Для разрядки:
Секретный алгоритм
Напишите три различных алгоритма сортировки строк

7
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 18:34 19
belalugoci, вы будете решать задание, по пути исправив свои ошибки? Или вам помочь?
Цитата Сообщение от belalugoci Посмотреть сообщение
тут с условием проблема, нужна сортировка строк или символов строки?
никаких проблем с условием тут нет. Все предельно ясно.
Цитата Сообщение от belalugoci Посмотреть сообщение
скорее всего речь про сортировку символов в строке
Написано же: "сортировка строк", что предполагает любые строки, в т.ч. однословные. Про символы речи не идет. Скрываетесь за попыткой "не понять" задачу?
Цитата Сообщение от belalugoci Посмотреть сообщение
я бы читал файлами в байтах
Вы о чем? ТС ни про какие файлы не говорит. Строки скорее всего вводятся в консоли:
Цитата Сообщение от Iluxa_programne Посмотреть сообщение
и отсортировать введенные строки
Цитата Сообщение от belalugoci Посмотреть сообщение
Для современного компьютера 10 и 100
тогда может считать в тактах ЦП?
0
Эксперт JavaЭксперт по электронике
3106 / 2201 / 553
Регистрация: 04.09.2018
Сообщений: 7,454
Записей в блоге: 3
06.05.2024, 19:30 20
Лучший ответ Сообщение было отмечено Iluxa_programne как решение

Решение

Iluxa_programne,
Методы сортировок

C#
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
static string bubble(string str)
{
    string[] parts = str.Split(new char[] { ' ', ',', ':', '.' }, StringSplitOptions.RemoveEmptyEntries);
 
    for (int i = 0; i < parts.Length; i++)
        for (int j = i + 1; j < parts.Length; j++)
            if (parts[i].CompareTo(parts[j]) > 0)
                (parts[j], parts[i]) = (parts[i], parts[j]);
 
    return string.Join(" ", parts);
}
 
static string insert(string str)
{
    string[] parts = str.Split(new char[] { ' ', ',', ':', '.' }, StringSplitOptions.RemoveEmptyEntries);
 
    for (int i = 1; i < parts.Length; i++)
    {
        string k = parts[i];
        int j = i - 1;
 
        while (j >= 0 && parts[j].CompareTo(k) > 0)
            parts[j + 1] = parts[j--];
        parts[j + 1] = k;
    }
    return string.Join(" ", parts);
}
 
static string merge(string str)
{
    string[] parts = str.Split(new char[] { ' ', ',', ':', '.' }, StringSplitOptions.RemoveEmptyEntries);
    if (parts.Length == 0 || parts.Length == 1)
        return str;
 
    return string.Join(" ", mergeSort(parts, 0, parts.Length - 1));
}
 
static void mergeCore(string[] arr, int low, int mid, int hi)
{
    int l = low, r = mid + 1, idx = 0;
    string[] tmp = new string[1 + hi - low];
 
    while ((l <= mid) && (r <= hi))
    {
        if (arr[l].CompareTo(arr[r]) < 0)
            tmp[idx] = arr[l++];
        else
            tmp[idx] = arr[r++];
        idx++;
    }
 
    for (var i = l; i <= mid; i++)
        tmp[idx++] = arr[i];
 
    for (var i = r; i <= hi; i++)
        tmp[idx++] = arr[i];
 
    for (var i = 0; i < tmp.Length; i++)
        arr[low + i] = tmp[i];
}
 
static string[] mergeSort(string[] str, int low, int hi)
{
    if (low < hi)
    {
        int mid = (low + hi) >> 1;
        mergeSort(str, low, mid);
        mergeSort(str, mid + 1, hi);
        mergeCore(str, low, mid, hi);
    }
    return str;
}

Замеряем...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
string s = "Напишите три различных алгоритма сортировки строк: сортировку пузырьком, сортировку вставками и сортировку слиянием";
 
Stopwatch sw = Stopwatch.StartNew();
Console.WriteLine(bubble(s));
sw.Stop();
Console.WriteLine($"Elapsed [ms/ticks]: {sw.ElapsedMilliseconds}/{sw.ElapsedTicks}\n");
 
sw.Restart();
Console.WriteLine(insert(s));
sw.Stop();
Console.WriteLine($"Elapsed [ms/ticks]: {sw.ElapsedMilliseconds}/{sw.ElapsedTicks}\n");
 
sw.Restart();
Console.WriteLine(merge(s));
sw.Stop();
Console.WriteLine($"Elapsed [ms/ticks]: {sw.ElapsedMilliseconds}/{sw.ElapsedTicks}\n");

Результаты

Напишите три различных алгоритма сортировки строк


Несмотря на то, что в измеренное время так же входят операции не относящиеся к сортировке как к таковой (разбитие строк/вывод в консоль), все же, общая картина складывается в пользу сортировки вставками, что на данной длине строки вполне логично. Для более длинных строк рекомендую поэкспериментировать самостоятельно и сравнить результаты (там положение вещей заметно изменится).

Цитата Сообщение от belalugoci Посмотреть сообщение
График можно рисовать как в консоли так и на форме или просто рисовать в памяти
Графики студенты рисуют в рабочих конспектах, а не программным способом, ибо на момент изучения видов сортировок они априори не обладают достаточными знаниями для отрисовки графиков нигде: ни в консоли ни где-либо еще.
5
06.05.2024, 19:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2024, 19:30
Помогаю со студенческими работами здесь

Реализовать три любых алгоритма сортировки матрицы на выбор
Всем привет форумчане, сижу и ломаю голову над заданной задачей. А точнее как ее реализовать т.к в...

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

Напишите программу, которая из букв вашей фамилии составляет три различных слова
Вы вводите с клавиатуры вашу фамилию в строчковую строковую переменную x. Напишите программу на...

Напишите процедуру сортировки строк в обратном алфавитном порядке
Помогите пожалуйста решить задачу, очень надо к пятнице. 3)Напишите процедуру сортировки строк...

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

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

Реализуйте на практике 2 алгоритма поиска и 2 алгоритма сортировки. Результаты сравните
Всем привет! Я в С++ абсолютный чайнег, поэтому за дебильные вопросы сапогами не пинайте))) в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru