С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 132
#1

Распараллелить алгоритм сортировки "пузырьком" - C++

09.05.2016, 07:28. Просмотров 552. Ответов 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
#include <iostream>
using namespace std;
 
int main()
{
    // Считываем размер массива,
    // который необходимо отсортировать
    int size;
    cin >> size;
 
    // Динамически выделяем память под
    // хранение массива размера size
    int *a = new int[size];
   
    // Считываем массив
    for (int i = 0; i < size; i++)
    {
        cin >> a[i];
    }
 
    // Внешний цикл алгоритма совершает
    // ровно 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]);
            }
        }
    }
 
    // Выводим отсортированный массив
    for (int i = 0; i < size; i++)
    {
        cout << a[i] << ' ';
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2016, 07:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Распараллелить алгоритм сортировки "пузырьком" (C++):

Метод сортировки "пузырьком" - C++
Написать программу которая реализует метод сортировки &quot;пузырьком&quot;. Сгенерировать три массива 100, 1.000 и 10.000 элементов типа integer...

Как возможно реализовать алгоритм сортировки "выбором" для строк матрицы? - C++
Допустим мне дана динамическая матрица размерностью n на m, и надо отсортировать строки между собой по сумме их элементов. вот такую...

Реализуйте шаблонный алгоритм "быстрой сортировки" - C++
Реализуйте шаблонный алгоритм &quot;быстрой сортировки&quot;: template&lt;class It, class Cmp&gt; void qsort(It beg, It end, Cmp cmp); Заранее...

Алгоритм "нестандартной" сортировки масива - C++
Задачка вот в чем: Пользователь вводит число N. Нужно вывести на экран все комбинации чисел от 1 до N в алфавитном порядке. Тоесть,...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Изменить метод "быстрой сортировки" на метод "сортировки вставками" - C++
Как изменить метод &quot;интеративной быстрой сортировки&quot; на метод &quot;сортировки вставками «с конца массива»&quot;? Нужно изменить только метод...

5
Unknownx
Заблокирован
09.05.2016, 08:22 #2
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
#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;
}
http://ideone.com/es9aQf
-6 -3 2 7 9 15 28
0
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 132
09.05.2016, 10:53  [ТС] #3
Это параллельная обработка?
0
Unknownx
Заблокирован
09.05.2016, 11:00 #4
Цитата Сообщение от Bubbles Посмотреть сообщение
Это параллельная обработка?
- а как ты думаешь?std::thread ни о чём не говорит?
0
Programmist5
Заблокирован
09.05.2016, 11:07 #5
А как вообще можно реализовать метод Пузырька параллельно, ведь он же должен выполняться последовательно?
0
Unknownx
Заблокирован
09.05.2016, 11:16 #6
Цитата Сообщение от Programmist5 Посмотреть сообщение
А как вообще можно реализовать метод Пузырька параллельно, ведь он же должен выполняться последовательно?
- вон выше показано как - создаётся size потоков по числу строк матрицы, все они синхронизированы поэтому пойдут по порядку(каждый сортировать свой участок массива), т.к объём данных мал то сортировка будет происходить где то за время пока цикл инкрементирует счётчик и проверяет условие продолжения, поэтому всё без проблем отрабатывает.
0
09.05.2016, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2016, 11:16
Привет! Вот еще темы с ответами:

Сортировка "пузырьком" массива структур по заданному полю - C++
Нужно отсортировать структуру по фамилии доктора, но что то он не сортирует. void sortDoc(Doctor doctor) { int size; ...

Сортировка одномерного массива методом обмена ("пузырьком") - C++
Имеется одномерный массив размерностью n, заполняемый генератором случайных чисел. Результат выводится на экран в 5 столбцов. Нужно...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Переделать рекурсивную сортировку "пузырьком" на итеративную - C++
Нужно код переделать сортировку Пузырьком переделать рекурсувную на сортировку циклами. { if(i&lt;=0) return; ...


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

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

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