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

Программа по сортировке массива

12.04.2018, 09:28. Показов 1455. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,господа
Написал программу по сортировке случайного массива,с замером времени на сортировку
В принципе,все работает
Но хотелось бы послушать замечания и указания на недочеты от более опытных людей



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
248
249
250
251
252
253
254
255
256
257
258
259
260
#include "stdafx.h"
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#include <iomanip>
 
using namespace std;
void quickSort(int *mas, int size);
void ChoiceSort(int *mas, int size);
void BubbleSort(int *mas, int size);
void InsertSort(int *mas, int size);
void ShellSort (int *mas, int size);
int main()
{
    /////////////////Инициализация массива////////////////////////////////////////
    
        setlocale(LC_ALL, "russian");
    srand(time(0));
 
 
    int n, u;
    char ch='a';
    unsigned int start_time, end_time, all_time;
    bool Again=true;
 
    cout << "Введите размер массива: ";
    cin >> n;
    int *Array = new int[n];
    
    cout << "\n" << "Случайный массив из " << n << " элементов: ";
    cout << "\n";
    for (u = 0; u < n; u++)
    {
        Array[u] = rand() % 1000;
        cout << Array[u] << " ";
 
    }
    cout << "\n";
 
    /////////////////Выбрать метод сортировки////////////////////////////////////////////////////////////
 
    int Sort;
 
    cout << "\n"
        << "Каким методом сортировки хотите отсортировать массив?" << "\n"
        << "-Быстрая сортировка     (Нажмите 1 + Enter)" << "\n"
        << "-Сортировка Выбором     (Нажмите 2 + Enter)" << "\n"
        << "-Сортировка Обменом     (Нажмите 3 + Enter)" << "\n"
        << "-Сортировка Включениями (Нажмите 4 + Enter)" << "\n"
        << "-Сортировка Шелла       (Нажмите 5 + Enter)" << "\n"
        << ">>";
 
    while (Again == true)
    {
        
        Again = false;
 
        cin >> Sort;
 
        
        switch (Sort)
        {
        case 1:
            cout << "\n";
            start_time = clock();
            quickSort(Array, n);
            end_time = clock();
            all_time = start_time - end_time;
            for (u = 0; u < n; u++)
                cout << Array[u] << " ";
            cout << "\n";
            cout << "\n Сортировка прошла за " << (float(end_time)) / CLOCKS_PER_SEC << " секунд." << endl;
            break;
        case 2:
            cout << "\n";
            start_time = clock();
            ChoiceSort(Array, n);
            end_time = clock();
            all_time = start_time - end_time;
            for (u = 0; u < n; u++)
                cout << Array[u] << " ";
            cout << "\n";
            cout << "\n Сортировка прошла за " << (float(end_time)) / CLOCKS_PER_SEC << " секунд." << endl;
            break;
        case 3:
            cout << "\n";
            start_time = clock();
            BubbleSort(Array, n);
            end_time = clock();
            all_time = start_time - end_time;
            for (u = 0; u < n; u++)
                cout << Array[u] << " ";
            cout << "\n";
            cout << "\n Сортировка прошла за " << (float(end_time)) / CLOCKS_PER_SEC << " секунд." << endl;
            break;
        case 4:
            cout << "\n";
            start_time = clock();
            InsertSort(Array, n);
            end_time = clock();
            all_time = start_time - end_time;
            for (u = 0; u < n; u++)
                cout << Array[u] << " ";
            cout << "\n";
            cout << "\n Сортировка прошла за " << (float(end_time)) / CLOCKS_PER_SEC << " секунд." << endl;
            break;
        case 5:
            cout << "\n";
            start_time = clock();
            ShellSort(Array, n);
            end_time = clock();
            all_time = start_time - end_time;
            for (u = 0; u < n; u++)
                cout << Array[u] << " ";
            cout << "\n";
            cout << "/n Сортировка прошла за " << (float(end_time)) / CLOCKS_PER_SEC << " секунд." << endl;
            break;
 
        default:
        {
            cout << "Введен неверный символ или цифра!(Введите 1,2,3,4 или 5 + Enter)" << "\n";
            cout << ">>";
            Again = true;
        }
        }
        
        
    }
        delete [] Array;
    system("pause");
    return 0;
 
}
 
/////////////////////////Функции сортировки///////////////////////////////////////////////////////////////////////////
 
void quickSort(int *mas, int size) {
    int i = 0;
    int j = size - 1;
 
    
    int mid = mas[size / 2];
 
    
    do {
        
        while (mas[i] < mid) {
            i++;
        }
        
        while (mas[j] > mid) {
            j--;
        }
 
        
        if (i <= j) {
            int tmp = mas[i];
            mas[i] = mas[j];
            mas[j] = tmp;
 
            i++;
            j--;
        }
    } while (i <= j);
 
 
    
    if (j > 0) {
        
        quickSort(mas, j + 1);
    }
    if (i < size) {
        
        quickSort(&mas[i], size - i);
    }
}
 
void ChoiceSort(int *mas, int size) {
    for (int i = 0; i < size; i++)
    {
        int min = mas[i];
        int imin = i;
        for (int c = i + 1; c < size; c++)
        {
            if (mas[c] < min)
            {
                min = mas[c];
                imin = c;
            }
        }
            if (imin != i)
            {
                int temp = mas[i];
                mas[i] = mas[imin];
                mas[imin] = temp;
 
            }
        
    }
}
 
void BubbleSort (int *mas,int size) {
    for (int c = 0; c < size - 1; c++)
    {
        for (int i = 0; i < size; i++)
            if (mas[i - 1] > mas[i])
            {
                int temp = mas[i - 1];
                mas[i - 1] = mas[i];
                mas[i] = temp;
            }
    }
 
 
}
 
 
void InsertSort(int *mas, int size) {
    for (int i = 1; i < size; i++)
    {
        int key = mas[i];
        int index = i - 1;
        while (index >= 0 && mas[index] > key)
        {
            mas[index + 1] = mas[index];
            mas[index] = key;
            index--;
        } 
    }
}
 
 
void ShellSort(int *mas, int size)
{
    int d = size / 2;
 
    while (d > 0)
    {
        for (int i = 0; i < size - d; i++)
        {
            int j = i;
            while (j >= 0 && mas[j] > mas[j + d])
            {
                int key = mas[j];
                mas[j] = mas[j+d];
                mas[j+d] = key;
                j--;
 
            }
        }
        d=d/2;
 
 
    }
 
    
 
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2018, 09:28
Ответы с готовыми решениями:

Программа зависает на сортировке
Привет, формучане. Имеется код двумерного массива для сортировки данных с главной и побочной линией. Суть задачи: отсортировать все...

Программа по сортировке участников
Доброго всем денька :) Вот такая вот задача у меня : При проведение конференции производиться регистрация участников.Эта программа...

Почему программа выдает мусор при сортировке извлечением?
Почему выдает мусор при сортировке извлечением(типо -84554515 и похожие числа),остальные нормально работают #include &lt;stdio.h&gt; ...

5
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
12.04.2018, 12:28
Массив по условию целочисленный ? Неиспользуемая переменная all_time (вероятно предполагали использовать её для подсчёта времени сортировки) В setlocale russian так: Russian Не заметил использования char ch='a'; по существу всё.

остальное - по Вашему усмотрению. На мой взгляд программу можно раза в 3 как минимум сжать. Например вместо:
C++
1
2
3
4
5
int i = 0;
int j = size - 1;
 
    
int mid = mas[size / 2];
можно в одну строку:
C++
1
int i = 0, j = size - 1, mid = mas[size / 2];
C++
1
2
3
int tmp = mas[i];
            mas[i] = mas[j];
            mas[j] = tmp;
можно в одну строку:
C++
1
swap(mas[i], mas[j]);
C++
1
2
cout << "\n" << "Случайный массив из " << n << " элементов: ";
    cout << "\n";
можно в одну строку:
C++
1
cout << "\nСлучайный массив из " << n << " элементов:\n";
Для вывода массива (учитывая что выводите 6 раз) можно организовать отдельную функцию Print
C++
1
for (u = 0; u < n; u++)
лучше так:
C++
1
for (int i = 0; i < n; i++)
соответственно в строке 22 оставить только int n;

вместо Sort лучше использовать другое название (например k) - всё время смотришь откуда этот Sort вызывается - очень на функцию похож. вместо quickSort лучше QuickSort

также проверьте насколько необходимы для этой программы
#include "stdafx.h"
#include <string>
#include <cstdlib>
#include <iomanip>
1
0 / 0 / 0
Регистрация: 05.08.2015
Сообщений: 2
12.04.2018, 14:19  [ТС]
Yetty, По условию он целочисленный
Переменную all_time планировал использовать для подсчета работы всей программы,но не успел поправить
И оставил библиотечные файлы ради интереса в том,что вставка библиотечных заголовочных файлов предпроцессора влияет на время работы программы или нет,но как сами понимаете,время работы всей программы я так и не засек

C++
1
char ch='a';
Ch хотел использовать как условие
Примерно так:
C++
1
2
3
4
5
6
7
8
9
while (ch != 'y')
{.......//создание нового случайного массива из числа элементов вводимым пользователем 
 .......//код программы
 ....... // после прохода одного из case
cout << "Хотите попробовать другой метод сортировки? (y/n)" <<  ">>" <<endl;
cin >> ch;
if (ch == 'n')
   exit(0);
}
для того,чтобы после сортировки массива программа спрашивала у пользователя,не хотел ли бы он попробовать другой метод сортировки
Большое спасибо за ваш ответ,поправил все,на что вы указали

P.s Немного не по теме,скажите,я в общем-то начинающий и с++ мой первый язык,который я хотел выучить,стоит ли продолжать дальше,но с тем фактом,что мне нужно выучить язык в короткий срок (примерно полгода) и желательно устроиться на работу
Я попробовал себя в Jave,как по мне это тот же с++,только там все на ООП,а здесь имеется структурный подход
Я дошел до понятий ООП,читаю литературу и пробую делать все сам
Что посоветуете выбрать и в какую сторону идти дальше?
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
12.04.2018, 14:28
сортировка прошла тоже наверное будет лучше выводить через функцию (TimeSort)

Цитата Сообщение от daaaaa Посмотреть сообщение
Переменную all_time планировал использовать для подсчета работы всей программы
так она ведь только одну сортировку считает, может её вместо end_time сюда float(end_time) поставить ?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.04.2018, 14:30
Сплошная копипаста.
Создали бы массив указателей на функции и вызывали бы нужные.
Цитата Сообщение от Yetty Посмотреть сообщение
cstdlib
srand, rand определены в нём.

Добавлено через 16 секунд
Хотя лучше вместо сишный таймеров использовать std::chrono
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
12.04.2018, 14:32
можно так:
while (n==1)
{
....
cout <<"Хотите попробовать другой метод сортировки? (1 - YES) "; cin >>n;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2018, 14:32
Помогаю со студенческими работами здесь

Почему программа падает при сортировке массивов больших размерностей
Добрый день! Подскажите почему прога крашится при размере массива 10000, при значении 1000 все прекрасно работает. #include...

Ошибка в сортировке массива
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; using namespace std; const int nmax = 100; //Функция создает...

ошибка в сортировке массива
Здравствуйте, помогите пожалуйста исправить ошибку Жалуется на скобку Задание: Нужен код сортировки массива методом...

Ошибка в сортировке массива
#include &lt;cmath&gt; #include &lt;iostream&gt; using namespace std; void sort(int n); void swap(int *p1,int *p2); int a; int main(){ ...

вывод массива в сортировке
В функции сортировки при каждом выполнении цикла надо выводить текущий массив, после сортировки. void sort2(int a,int n) { int...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru