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
| #include <thread>
#include <iostream>
using namespace std;
void sort_proc(int * a, int i, int size){
for (int j = size - 1; j > i; j--)
{
// Если соседние элементы расположены
// в неправильном порядке, то меняем
// их местами
if (a[j] < a[j - 1])
{
swap (a[j], a[j - 1]);
}
}
}
int main()
{
// Считываем размер массива,
// который необходимо отсортировать
//int size;
//cin >> size;
// Динамически выделяем память под
// хранение массива размера size
//int *a = new int[size];
// Считываем массив
//for (int i = 0; i < size; i++)
//{
// cin >> a[i];
//}
int a[] = {-3, 9, 2, -6, 7, 28, 15};
int size = sizeof(a) / sizeof(a[0]);
thread ** pool = new thread* [size];
// Внешний цикл алгоритма совершает
// ровно size итераций
for (int i = 0; i < size; i++)
{
// Массив просматривается с конца до
// позиции i и "легкие элементы всплывают"
/*for (int j = size - 1; j > i; j--)
{
// Если соседние элементы расположены
// в неправильном порядке, то меняем
// их местами
if (a[j] < a[j - 1])
{
swap (a[j], a[j - 1]);
}
}*/
pool[i] = new thread(sort_proc, a, i, size);
pool[i]->join();
}
// Выводим отсортированный массив
for (int i = 0; i < size; i++)
{
cout << a[i] << ' ';
delete pool[i];
}
delete [] pool;
return 0;
} |