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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти количество цифр в натуральном числе N, вводимом с клавиатуры. Borland C++ http://www.cyberforum.ru/cpp-beginners/thread570967.html
Нужна помощь! Максимальная длинна числа при котором правильно считает 10. Как сделать так, чтоб программа считала количество цифр больше 10??? /* Задание 3.100 Найти количество цифр в...
C++ метод Рунге-Кутта Помогите написать программу на хаотичное движение бильярдных шаров методом Рунге-Кутта. При столкновении шары должны отталкиваться, ну и с течением времени замедляться. http://www.cyberforum.ru/cpp-beginners/thread570961.html
C++ Структуры: Сведения об автомобиле состоят из номера, марки, фамилии владельца, признака прохождения техосмотра
Помогите решить структурную задачу Сведения об автомобиле состоят из номера, марки, фамилии владельца, признака прохождения техосмотра. Написать программу для занесения в массив информации о N...
Найти причины возникновения ошибок в коде и исправить эти ошибки (динамический двумерный массив) C++
Подскажите пожалуйста,что я упустила, где шибка? #include <iostream> using namespace std; void main() { int n=0; int m=0; cin>>n>>m;
C++ Составить словарь-справочник биологических растений http://www.cyberforum.ru/cpp-beginners/thread570936.html
Помогите пожалуйста. Нужно скласть словарь-справочник биологических растений, можно только одно растение для примера, надо в консоли (вел с клавиатуры название а вывело информацию).
C++ Удаление тэгов. Задача. Написал часть программы, а условие для удаления не могу придумать. Кто чем поможет? В текстовом файле хранится сохраненная html страница. Перевести ёё в простой текстовый вид, т.е. удалить из нее... подробнее

Показать сообщение отдельно
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255

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

11.05.2012, 03:49. Просмотров 865. Ответов 2
Метки (Все метки)

Здравствуйте!

Пузырьковая сортировку 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;
}
Как видно во вложениях время на сортировку одного массива в одном потоке и время сортировки двух массивов в двух потоков, практически одинаковое!

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

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

Может кому - то пригодится!
0
Миниатюры
Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке   Пузырьковая сортировка 2 массивов. Каждый массив в отдельном потоке  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru