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

Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке - C++

Восстановить пароль Регистрация
 
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
11.05.2012, 03:49     Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке #1
Здравствуйте!

Пузырьковая сортировку 2 массивов параллельно, то есть каждый массив в отдельном потоке сортируется!


2 потока, 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
#include "windows.h"
#include "process.h"
#include "iostream"
#include "ctime"
 
const int size = 40000;
clock_t start, finish;
unsigned __stdcall ThreadFunc(void *arg)
{
    int **mas = (int**)arg;
    start = clock();
    for(int i = size - 1; i >= 1; --i)
    {
        for(int j = 0; j < i; ++j)
        {
            if(mas[j] > mas[j + 1])
            {
                int *buf = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = buf;
            }
        }
    }
    finish = clock();
    _endthreadex(0);
    return 0;
}
 
int main(int argc, char* argv[])
{
    setlocale(0,"");
    srand(time(0));
    unsigned uThreadIDs[2];
    HANDLE hThreads[2];
    
    int *mas = new int [size];
    int *mas1 = new int [size];
 
    for(int i = 0; i < size; i++)
    {
        mas[i] = rand() % 10;
        mas1[i] = rand() % 10;
    }
 
    hThreads[0] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, mas, 0, &uThreadIDs[0]);
    hThreads[1] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, mas1, 0, &uThreadIDs[1]);
 
    WaitForMultipleObjects(2, hThreads, TRUE, INFINITE );
 
    std::cout << "\nКоличество элементов в каждом массиве: " << size;
    std::cout << "\nВремя сортировки - 2 потока: " << (finish - start) / (double)CLOCKS_PER_SEC << " сек";
    
    CloseHandle( hThreads[0] );
    CloseHandle( hThreads[1] );
 
    delete  [] mas;
    delete  [] mas1;
    system("pause >> null");
    return 0;
}
для сранение времени сортировки

1 - поток, 1 массив

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
#include "windows.h"
#include "process.h"
#include "iostream"
#include "ctime"
 
const int size = 40000;
clock_t start, finish;
unsigned __stdcall ThreadFunc(void *arg)
{
    int **mas = (int**)arg;
    start = clock();
    for(int i = size - 1; i >= 1; --i)
    {
        for(int j = 0; j < i; ++j)
        {
            if(mas[j] > mas[j + 1])
            {
                int *buf = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = buf;
            }
        }
    }
    finish = clock();
    _endthreadex(0);
    return 0;
}
 
int main(int argc, char* argv[])
{
    setlocale(0,"");
    srand(time(0));
    unsigned uThreadIDs[1];
    HANDLE hThreads[1];
    
    int *mas = new int [size];
 
    for(int i = 0; i < size; i++)
    {
        mas[i] = rand() % 10;
    }
    hThreads[0] = (HANDLE)_beginthreadex( NULL, 0, &ThreadFunc, mas, 0, &uThreadIDs[0]);
 
    WaitForMultipleObjects(1, hThreads, TRUE, INFINITE );
 
    std::cout << "\nКоличество элементов в каждом массиве: " << size;
    std::cout << "\nВремя сортировки - 1 потока: " << (finish - start) / (double)CLOCKS_PER_SEC << " сек";
    
    CloseHandle( hThreads[0] );
    
    delete  [] mas;
    system("pause >> null");
    return 0;
}
Как видно во вложениях время на сортировку одного массива в одном потоке и время сортировки двух массивов в двух потоков, практически одинаковое!

Груба говоря на сортировку второго массива время не тратиться, он сортируется параллельно первому!

Возможно не оптимальный вариант реализации!

Может кому - то пригодится!
Миниатюры
Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке   Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 03:49     Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке
Посмотрите здесь:

Выполнение операций в отдельном потоке C++
OpenGL прорисовка в отдельном потоке C++
Реализовать систему плагинов (модулей), каждый из которых должен работать в отдельном потоке C++
C++ Класс в отдельном потоке
C++ Запуск цикла в отдельном потоке
C++ Пузырьковая сортировка двумерных массивов
Запуск функции в отдельном потоке unix C++
C++ Исполнение функции-члена в отдельном потоке

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.05.2012, 04:00     Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке #2
А зачем вообще рузырьковая сортировка? Oo Думаю лучше уж использовать сортировку вставкой в крайнем случае.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
11.05.2012, 04:05  [ТС]     Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке #3
Цитата Сообщение от Toshkarik Посмотреть сообщение
А зачем вообще рузырьковая сортировка? Oo Думаю лучше уж использовать сортировку вставкой в крайнем случае.
Это как пример! Какую хотите такую и используйте сортировку, для этого напишите в функции потока свою сортировку

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
unsigned __stdcall ThreadFunc(void *arg)
{
    int **mas = (int**)arg;
    start = clock();
    //начало сортировки
    for(int i = size - 1; i >= 1; --i)
    {
        for(int j = 0; j < i; ++j)
        {
            if(mas[j] > mas[j + 1])
            {
                int *buf = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = buf;
            }
        }
    }
    //конец сортировки
    finish = clock();
    _endthreadex(0);
    return 0;
}
всего то дела!
Yandex
Объявления
11.05.2012, 04:05     Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке
Ответ Создать тему
Опции темы

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