Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
5 / 5 / 2
Регистрация: 02.10.2011
Сообщений: 87

ЛР: Сравнение сортировок

19.02.2013, 18:44. Показов 4207. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно экспериментально сравнить временную сложность и провести качественный анализ трех сортировок:
  • выбором
  • шейкерная
  • слиянием


В коде программы для каждого реализуемого метода сортировки необходимо предусмотреть переменные-счетчики, для определения числа операций попарных сравнений и перестановок элементов, совершенных в ходе выполнения операций сортировки. Результирующие значения счетчиков необходимо выводить на экран после каждого выполнения операции сортировки.
Вопрос первый: Как лучше реализовать эти счетчики? Для трех сортировок заводить каждый раз новый? или каждый раз перезаписывать?

На основании серии экспериментов построить таблицы и графики искомых зависимостей и качественно определить их характер – линейный, логарифмический, экспоненциальный, и т.д. Сравнить экспериментальные результаты с теоретическими оценками временной сложности исследуемых методов внутренней сортировки.
Вопрос главный: как можно реализовать поудобнее и по красивее построение графиков? Пока единственный видимый вариант, это записывать значение счетчиков в файл, а потом вручную копирывать в эксель...

Очень надеюсь на ваши подсказки и помощь
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2013, 18:44
Ответы с готовыми решениями:

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

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

Сравнение 2-х сортировок массива
Есть два метода сортировки массива Вставки и Пузырька. Как их сравнить, что бы узнать, который из них лучше сортирует. Если я не ошибаюсь,...

7
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
19.02.2013, 18:49
Цитата Сообщение от Point_0 Посмотреть сообщение
Пока единственный видимый вариант, это записывать значение счетчиков в файл, а потом вручную копирывать в эксель...
Да тут графики совсем простые, их можно руками в ворде нарисовать. 2 оси - N (кол-во сортируемых элементов) и кол-во перестановок (или что там будет считаться). Прогнать программу раз 10 для разных N (чтоб было из чего график строить), будет 10 подсчитаных значений, из этого и рисовать график.

Добавлено через 1 минуту
Цитата Сообщение от Point_0 Посмотреть сообщение
Как лучше реализовать эти счетчики? Для трех сортировок заводить каждый раз новый? или каждый раз перезаписывать?
счетчик - просто переменная, которая будет считать кол-во перестановок (или сравнений). Естественно для каждой сортировки - свой счетчик.
0
5 / 5 / 2
Регистрация: 02.10.2011
Сообщений: 87
19.02.2013, 18:51  [ТС]
Kastaneda,
от руки тоже легко, но не в кайф, все таки охото максимум автоматизировать
0
5 / 5 / 2
Регистрация: 02.10.2011
Сообщений: 87
24.03.2013, 19:31  [ТС]
Товарищи, нужна помощь
получался, написал, вот что получилось
но проблема, в Дев Си++ вылетает, вроде какая то ошибка (что то типа переполнения памяти), не могу разобраться
помогите найти ее!
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <fstream>
 
 
 
 
int * A = NULL;
int n=9,p=3,b=5,d=3;                                                            //n-êîëè÷åñòâî ýëåìåíòîâ p-øàã b-÷èñëî øàãîâ d-êîëè÷åñòâî ñåðèé
int pere,srav, pere2=0,srav2=0;
int ll=0;
std::ofstream outfile("file.txt");                                               // èñïîëüçóåòñÿ äëÿ âûâîäà äàííûõ â ôàéë
std::ofstream outtable("tablePerest.txt");                                             // ÷èñëî ïåðåñòàíîâîê
std::ofstream outtable2("tableSravn.txt");                                           // ÷èñëî ñðàâíåíèé
 
 
int (*sel) (int);
int (*coct) (int);
int (*mer) (int);
 
 
int * AllocateArray(int length)                                                  // ôóíêöèÿ âûäåëåíèÿ ïàìÿòè äëÿ ìàññèâà è çàïîëíåíèÿ åãî ïðîèçâîëüíûìè ÷èñëàìè
{
    int * vec;
    vec= new int[length];
    if(ll==0)
        srand ((unsigned) time(NULL));                                             // óñòàíàâëèâàåò èñõîäíîå ÷èñëî äëÿ ïîñëåäîâàòåëüíîñòè, ãåíåðèðóåìîé ôóíêöèåé rand()
    for (int i=0; i<length; i++) vec[i]=rand()%100;                              // ìàññèâ çàïîëíÿåòñÿ çíà÷åíèÿìè îò 0 äî 100
    ll++;
    return vec;
}
 
void ReleaseArray(int ** vec)                                                    // îñâîáîæäåíèå ïàìÿòè
{
    if ((*vec))
        delete  [](*vec) ;
    (*vec)=NULL;
}
 
int Selection_sort(int g)  // Ñîðòèðîâêà âûáîðîì
{
    A=AllocateArray(g);
    int min, i, temp, j;
 
    for (int i = 0; i < g-1; i++)
    {
        int min=i;
        for (int j=i+1; j < g; j++)
        {
            if (A[j] < A[min]) min=j;
            srav++;
        }
 
        temp = A[i];
        A[i] = A[min];
        A[min] = temp;
 
        pere++;
    }
    ReleaseArray(&A);
    return 0;
}
 
 
 
int Cocktail_sort(int g)   // Øåéêåðíàÿ ñîðòèðîâêà
{
    int i=0,j,k,d=1,temp;
    A=AllocateArray(g);
 
    for (k=g; k>0; k--)
    {
        i=i+d;
        for (j=1; j<=k; j++)
        {
            if ((A[i]-A[i+d])*d>0)                                                   // ìåíÿåì ìåñòàìè ñîñåäíèå ýëåìåíòû
            {
                temp=A[i];
                A[i]=A[i+d];
                A[i+d]=temp;
                pere++;
            }
            srav++;
            i=i+d;
        }
        d=-d;                                                                         // ìåíÿåì íàïðàâëåíèå äâèæåíèÿ íà ïðîòèâîïîëîæíîå
    }
 
    ReleaseArray(&A);
    return 0;
}
 
int merge(int A[], int g, int l, int m, int r)  // ñëèÿíèåì
{
    int i, j;
    int aux[g];
    for (i = m+1; i > l; i--) aux[i-1] = A[i-1];
    for (j = m; j < r; j++) aux[r+m-j] = A[j+1];
    for (int k = l; k <= r; k++)
    {
        pere++;
        srav++;
        if (aux[j] < aux[i])
            A[k] = aux[j--];
        else
            A[k] = aux[i++];
    }
    return 0;
}
 
int Merge_sort(int A[], int g, int l, int r)
{
 
    if (r <=l) return -1;
    int m = (r+l)/2;
    Merge_sort(A, g, l, m);
    Merge_sort(A, g, m+1, r);
    merge(A, g, l, m, r);
 
    return 0;
 
}
 
int Merge_sort1(int g)
{
    A=AllocateArray(g);
    Merge_sort(A, g, 0, g-1);
    ReleaseArray(&A);
    return 0;
}
 
 
 
int ex(int (*s) (int))
{
    int a,c,m=n,pere1=0,srav1=0;
    pere=0;
 
    for(a=0; a<b; a++)
    {
        outtable << m << ";";                                                      // çàïèñûâàåò ðàçìåð ìàññèâà íà êàæäîì øàãå
        outtable2 << m << ";";
 
        for(c=0; c<d; c++)
        {
            (s)(m);
            pere1=pere1+pere;
            srav1=srav1+srav;
            outtable << pere << ";";
            outtable2 << srav << ";";
 
            srav=0;
            pere=0;
        }
 
        outtable << std::endl;
        outtable2 << std::endl;
        pere1=pere1/d;                                                               //ñðåäíèå çíà÷åíèÿ
        srav1=srav1/d;
        outfile << m << ";" << pere1 << ";" << srav1 << std::endl;
 
        pere1=0;
        srav1=0;
        m=m+p;
    }
    return 0;
}
 
int menu()
{
    std::cout << "[1] Dlinna sortiruemogo massiva: " << n << " elementov" << std::endl;
    std::cout << "[2] Shag uvelichenia dlinny mass: " << p << " elementov " <<std::endl;
    std::cout << "[3] Chislo shagov: " << b << std::endl;
    std::cout << "[4] Xhislo sort na kazdom shage: " << d << std::endl;
    std::cout << "[A] Vypolnit eksperiment" << std::endl;
    std::cout << "[B] Exit" << std::endl;
    return 0;
}
 
int main()
{
 
 
    char otv;
 
    sel=&Selection_sort;
    coct=&Cocktail_sort;
    mer=&Merge_sort1;
 
 
    menu();
 
    do
    {
        std::cin >> otv;
        switch(otv)
        {
 
        case '1':
            system("cls");
            std::cout << "Vvedite razmer massiva: ";
            std::cin >> n;
            menu();
            break;
 
        case '2':
            system("cls");
            std::cout << "Vved shag dlinni mass: ";
            std::cin >> p;
            menu();
 
            break;
 
        case '3':
            system("cls");
            std::cout << "Vved novoe chislo shagov: ";
            std::cin >> b;
            menu();
            break;
        case '4':
            system("cls");
            std::cout << "Vved chislo sort na kazdom shage: ";
            std::cin >> d;
            menu();
            break;
        case 'A':
            system("cls");
            ex((*sel));
            ex((*coct));
            ex((*mer));
            std::cout << "Fail zapisan" << std::endl;
            menu();
            break;
        case 'B':
            system("cls");
            break;
        default:
            std::cout << "Net takogo punckta\n";
            menu();
            break;
        };
    }
    while(otv!='B');
    return 0;
}
0
5 / 5 / 2
Регистрация: 02.10.2011
Сообщений: 87
31.03.2013, 22:32  [ТС]
ребят, никто не в курсе?(
0
5 / 5 / 2
Регистрация: 02.10.2011
Сообщений: 87
09.04.2013, 20:51  [ТС]
Ребят, ну помогите(
0
5 / 5 / 2
Регистрация: 02.10.2011
Сообщений: 87
20.04.2013, 22:38  [ТС]
ошибка исправлена
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <fstream>
 
 
 
 
int * A = NULL;
int n=9,p=3,b=5,d=3;                                                            //n-количество элементов p-шаг b-число шагов d-количество серий
int pere,srav, pere2=0,srav2=0;
int ll=0;
std::ofstream outfile("file.txt");                                               // используется для вывода данных в файл
std::ofstream outtable("tablePerest.txt");                                             // число перестановок
std::ofstream outtable2("tableSravn.txt");                                           // число сравнений
 
 
int (*sel) (int);
int (*coct) (int);
int (*mer) (int);
 
 
int * AllocateArray(int length)                                                  // функция выделения памяти для массива и заполнения его произвольными числами
{
    int * vec;
    vec= new int[length];
    if(ll==0)
        srand ((unsigned) time(NULL));                                             // устанавливает исходное число для последовательности, генерируемой функцией rand()
    for (int i=0; i<length; i++) vec[i]=rand()%100;                              // массив заполняется значениями от 0 до 100
    ll++;
    return vec;
}
 
void ReleaseArray(int ** vec)                                                    // освобождение памяти
{
    if ((*vec))
        delete  [](*vec) ;
    (*vec)=NULL;
}
 
int Selection_sort(int g)  // Сортировка выбором
{
    A=AllocateArray(g);
    int min, i, temp, j;
 
    for (int i = 0; i < g-1; i++)
    {
        int min=i;
        for (int j=i+1; j < g; j++)
        {
            if (A[j] < A[min]) min=j;
            srav++;
        }
 
        temp = A[i];
        A[i] = A[min];
        A[min] = temp;
 
        pere++;
    }
    ReleaseArray(&A);
    return 0;
}
 
 
 
int Cocktail_sort(int g)   // Шейкерная сортировка
{
    int i=0,j,k,d=1,temp;
    A=AllocateArray(g);
 
    for (k=g - 1; k>=0; k--)
    {
        i=i+d;
        for (j=1; j<=k; j++)
        {
            if ((A[i]-A[i+d])*d>0)                                                   // меняем местами соседние элементы
            {
                temp=A[i];
                A[i]=A[i+d];
                A[i+d]=temp;
                pere++;
            }
            srav++;
            i=i+d;
        }
        d=-d;                                                                         // меняем направление движения на противоположное
    }
 
    ReleaseArray(&A);
    return 0;
}
 
int merge(int A[], int g, int l, int m, int r)  // слиянием
{
    int i, j;
    int aux[g];
    for (i = m+1; i > l; i--) aux[i-1] = A[i-1];
    for (j = m; j < r; j++) aux[r+m-j] = A[j+1];
    for (int k = l; k <= r; k++)
    {
        pere++;
        srav++;
        if (aux[j] < aux[i])
            A[k] = aux[j--];
        else
            A[k] = aux[i++];
    }
    return 0;
}
 
int Merge_sort(int A[], int g, int l, int r)
{
 
    if (r <=l) return -1;
    int m = (r+l)/2;
    Merge_sort(A, g, l, m);
    Merge_sort(A, g, m+1, r);
    merge(A, g, l, m, r);
 
    return 0;
 
}
 
int Merge_sort1(int g)
{
    A=AllocateArray(g);
    Merge_sort(A, g, 0, g-1);
    ReleaseArray(&A);
    return 0;
}
 
 
 
int ex(int (*s) (int))
{
    int a,c,m=n,pere1=0,srav1=0;
    pere=0;
 
    for(a=0; a<b; a++)
    {
        outtable << m << ";";                                                      // записывает размер массива на каждом шаге
        outtable2 << m << ";";
 
        for(c=0; c<d; c++)
        {
            (s)(m);
            pere1=pere1+pere;
            srav1=srav1+srav;
            outtable << pere << ";";
            outtable2 << srav << ";";
 
            srav=0;
            pere=0;
        }
 
        outtable << std::endl;
        outtable2 << std::endl;
        pere1=pere1/d;                                                               //средние значения
        srav1=srav1/d;
        outfile << m << ";" << pere1 << ";" << srav1 << std::endl;
 
        pere1=0;
        srav1=0;
        m=m+p;
    }
    return 0;
}
 
int menu()
{
    std::cout << "[1] Dlinna sortiruemogo massiva: " << n << " elementov" << std::endl;
    std::cout << "[2] Shag uvelichenia dlinny mass: " << p << " elementov " <<std::endl;
    std::cout << "[3] Chislo shagov: " << b << std::endl;
    std::cout << "[4] Xhislo sort na kazdom shage: " << d << std::endl;
    std::cout << "[A] Vypolnit eksperiment" << std::endl;
    std::cout << "[B] Exit" << std::endl;
    return 0;
}
 
int main()
{
 
 
    char otv;
 
    sel=&Selection_sort;
    coct=&Cocktail_sort;
    mer=&Merge_sort1;
 
 
    menu();
 
    do
    {
        std::cin >> otv;
        switch(otv)
        {
 
        case '1':
            system("cls");
            std::cout << "Vvedite razmer massiva: ";
            std::cin >> n;
            menu();
            break;
 
        case '2':
            system("cls");
            std::cout << "Vved shag dlinni mass: ";
            std::cin >> p;
            menu();
 
            break;
 
        case '3':
            system("cls");
            std::cout << "Vved novoe chislo shagov: ";
            std::cin >> b;
            menu();
            break;
        case '4':
            system("cls");
            std::cout << "Vved chislo sort na kazdom shage: ";
            std::cin >> d;
            menu();
            break;
        case 'A':
            system("cls");
            ex((*sel));
            ex((*coct));
            ex((*mer));
            std::cout << "Fail zapisan" << std::endl;
            menu();
            break;
        case 'B':
            system("cls");
            break;
        default:
            std::cout << "Net takogo punckta\n";
            menu();
            break;
        };
    }
    while(otv!='B');
    return 0;
}
0
21.04.2013, 10:43
 Комментарий модератора 
Кросспостинг https://www.cyberforum.ru/orde... 40027.html.
Тема закрыта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2013, 10:43
Помогаю со студенческими работами здесь

Сравнение алгоритмов сортировок
Добрый день всем! Интересует вопрос об оптимизации алгоритмов сортировки: пузирька, пузирька оптимиз. и Шейкера. Подскажите: 1) Как...

Сравнение методов сортировок массивов. Семестровая работа
Пишу семестровую по методам сортировки массивов. В моем варианте метод прямого выбора и метод Шейкера. Надо сравнить количество...

Сравнение сортировок
Доброго времени суток. Задание: &quot;1. Реализовать 3 алгоритма сортировки, в соответствии с вариантом, определенным преподавателем. ...

Сравнение сортировок!
Ребят помогите пожалуйста.. надо зачет получить а не успела все задачи сдать((( Написать сортировки массива- прямое включение и шелла,...

Сравнение сортировок Delphi
Есть программа, сортирующая массив чисел (10т элементов) разными методами сортировок, необходимо сравнить эти методы. Подкиньте идею,...


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

Или воспользуйтесь поиском по форуму:
8
Закрытая тема Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru