|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.11.2017, 01:01 | #1 |
Новичок
Джуниор
Регистрация: 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; } |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
многопоточная сортировка в 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 |