Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2017, 01:01   #1
modzinoga
Новичок
Джуниор
 
Регистрация: 16.11.2017
Сообщений: 1
По умолчанию Многопоточная быстрая сортировка Dev C++

Очень нужна помощь! Написана программа быстрой сортировки массива (однопоточная и распараллелиная). Но нужно, что бы выводилось время счета разного объёма массива одним ядром и двумя ядрами (однопоточная программа). И время счета разного объёма массива 2 - мя потоками, 4 - мя потоками.

Однопоточная:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

// Функция быстрой сортировки
void quickSort(int *numbers, int left, int right)
{
int pivot; // разрешающий элемент
int l_hold = left; //левая граница
int r_hold = right; // правая граница
pivot = numbers[left];
while (left < right) // пока границы не сомкнулись
{
while ((numbers[right] >= pivot) && (left < right))
right--; // передвигаем правую границу пока элемент [right] больше разрешающего элемента [pivot]
if (left != right) // если границы не сомкнулись
{
numbers[left] = numbers[right]; // передвигаем элемент [right] на место разрешающего
left++; // сдвигаем левую границу вправо
}
while ((numbers[left] <= pivot) && (left < right))
left++; // сдвигаем левую границу пока элемент [left] меньше разрешающего элемента [pivot]
if (left != right) // если границы не сомкнулись
{
numbers[right] = numbers[left]; // перемещаем элемент [left] на место [right]
right--; // сдвигаем правую границу вправо
}
}
numbers[left] = pivot; // ставим разрешающий элемент на место
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot) // рекурсивно вызываем сортировку для левой и правой части массива
quickSort(numbers, left, pivot - 1);
if (right > pivot)
quickSort(numbers, pivot + 1, right);
}
int main()
{
int n;
int a[n];
// заполнение массива случайными числами
cin>>n;
for (int i = 0; i<n; i++)
a[i] = rand() % 20 - 10;
// вывод элементов массива до сортировки
for (int i = 0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
quickSort(a, 0, 9); // вызов функции сортировки
// вывод элементов массива после сортировки
for (int i = 0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
getchar();
return 0;
}



Распараллелиная:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <iostream>
using namespace std;

// Функция быстрой сортировки
void quickSort(int *numbers, int left, int right)
{
int pivot; // разрешающий элемент
int l_hold = left; //левая граница
int r_hold = right; // правая граница
pivot = numbers[left];


#pragma omp parallel num_threads(2)
{

while (left < right) // пока границы не сомкнулись
{
while ((numbers[right] >= pivot) && (left < right))
right--; // передвигаем правую границу пока элемент [right] больше разрешающего элемента [pivot]
if (left != right) // если границы не сомкнулись
{
numbers[left] = numbers[right]; // передвигаем элемент [right] на место разрешающего
left++; // сдвигаем левую границу вправо
}
while ((numbers[left] <= pivot) && (left < right))
left++; // сдвигаем левую границу пока элемент [left] меньше разрешающего элемента [pivot]
if (left != right) // если границы не сомкнулись
{
numbers[right] = numbers[left]; // перемещаем элемент [left] на место [right]
right--; // сдвигаем правую границу вправо
}
}
numbers[left] = pivot; // ставим разрешающий элемент на место
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot) // рекурсивно вызываем сортировку для левой и правой части массива
quickSort(numbers, left, pivot - 1);
if (right > pivot)
quickSort(numbers, pivot + 1, right);
}
}

int main()
{
int n;
int a[n];
// заполнение массива случайными числами
cin>>n;
#pragma omp parallel for
for (int i = 0; i<n; i++)
a[i] = rand() % 20 - 10;
// вывод элементов массива до сортировки
#pragma omp parallel for
for (int i = 0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
quickSort(a, 0, 9); // вызов функции сортировки
// вывод элементов массива после сортировки
#pragma omp parallel for
for (int i = 0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
getchar();
return 0;
}
modzinoga вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
многопоточная сортировка в winapi Arrioh Помощь студентам 0 09.06.2013 23:40
многопоточная сортировка слиянием gagarin614 Помощь студентам 0 03.10.2012 16:03
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Быстрая сортировка(сортировка хаора) с++ LustHunter Помощь студентам 3 07.10.2011 19:37
быстрая сортировка настолько быстрая Serg12 Помощь студентам 8 28.03.2010 21:31