Форум программистов, компьютерный форум CyberForum.ru

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

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

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

09.05.2016, 07:28. Просмотров 247. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2016, 07:28     Распараллелить алгоритм сортировки "пузырьком"
Посмотрите здесь:

C++ Алгоритм "нестандартной" сортировки масива
Метод сортировки "пузырьком" C++
C++ Исследование сортировки метода "пузырек" для большого массива
Переделать рекурсивную сортировку "пузырьком" на итеративную C++
Сортировка массива по возрастанию "пузырьком" C++
Упорядочивание "пузырьком" массивов, вводимых пользователем C++
Как возможно реализовать алгоритм сортировки "выбором" для строк матрицы? C++
C++ Нужно доделать код! Исключить из дерева сортировки число "2"
Сортировка одномерного массива методом обмена ("пузырьком") C++
Ошибка сортировки "error C3861: merge: идентификатор не найден" C++
Сортировка "пузырьком" массива структур по заданному полю C++
C++ Изменить метод "быстрой сортировки" на метод "сортировки вставками"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Bubbles
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 130
09.05.2016, 10:53  [ТС]     Распараллелить алгоритм сортировки "пузырьком" #3
Это параллельная обработка?
Unknownx
Заблокирован
09.05.2016, 11:00     Распараллелить алгоритм сортировки "пузырьком" #4
Цитата Сообщение от Bubbles Посмотреть сообщение
Это параллельная обработка?
- а как ты думаешь?std::thread ни о чём не говорит?
Programmist5
 Аватар для Programmist5
-33 / 11 / 2
Регистрация: 07.05.2016
Сообщений: 90
09.05.2016, 11:07     Распараллелить алгоритм сортировки "пузырьком" #5
А как вообще можно реализовать метод Пузырька параллельно, ведь он же должен выполняться последовательно?
Unknownx
Заблокирован
09.05.2016, 11:16     Распараллелить алгоритм сортировки "пузырьком" #6
Цитата Сообщение от Programmist5 Посмотреть сообщение
А как вообще можно реализовать метод Пузырька параллельно, ведь он же должен выполняться последовательно?
- вон выше показано как - создаётся size потоков по числу строк матрицы, все они синхронизированы поэтому пойдут по порядку(каждый сортировать свой участок массива), т.к объём данных мал то сортировка будет происходить где то за время пока цикл инкрементирует счётчик и проверяет условие продолжения, поэтому всё без проблем отрабатывает.
Yandex
Объявления
09.05.2016, 11:16     Распараллелить алгоритм сортировки "пузырьком"
Ответ Создать тему
Опции темы

Текущее время: 10:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru