Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 10.10.2018
Сообщений: 5
1

Разница во времени между рекурсивной и многопоточной быстрой сортировкой

19.12.2018, 20:24. Показов 289. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
#include "pch.h"
#include <iostream>
#include<stdio.h>
#include<ctime>
#include<vector>
#include<thread>
#include<chrono>
#include<mutex>
using namespace std;
using namespace chrono;
mutex mut;

void ThreadQuickSort(int arr[], int left1, int right1) {
mut.lock();
int i1 = left1, j1 = right1;
int tmp1;
int pivot1 = arr[(left1 + right1) / 2];
while (i1 <= j1) {
while (arr[i1] < pivot1)
i1++;
while (arr[j1] > pivot1)
j1--;
if (i1 <= j1) {
tmp1 = arr[i1];
arr[i1] = arr[j1];
arr[j1] = tmp1;
i1++;
j1--;
}
};
mut.unlock();
if (left1 < j1) {
thread thr3(ThreadQuickSort, arr, left1, j1);
thr3.join();
}
if (i1 < right1) {
thread thr4(ThreadQuickSort, arr, i1, right1);
thr4.join();
}
}

void quickSort(int arr[], int left, int right) {
int i = left, j = right;
mut.lock();
int i1 = left, j1 = right;
int tmp1;
int pivot1 = arr[(left + right) / 2];
while (i1 <= j1) {
while (arr[i1] < pivot1)
i1++;
while (arr[j1] > pivot1)
j1--;
if (i1 <= j1) {
tmp1 = arr[i1];
arr[i1] = arr[j1];
arr[j1] = tmp1;
i1++;
j1--;
}
};
mut.unlock();
if (left < j1) {
thread thr3(ThreadQuickSort, arr, left, j1);
thr3.join();
}
if (i1 < right) {
thread thr4(ThreadQuickSort, arr, i1, right);
thr4.join();
}
}

void quickRecurSort(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};

if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}

void print(int arr[], int n) {
for (int i = 0; i < n; i++) {
cout << arr[i] << endl;
}
cout << endl;
}

int main()
{
double diffrence;
setlocale(LC_ALL, "rus");
int n;
cin >> n;
int i,j;
double RecursDiffrence;
int* arr = new int[n];
for (i = 0; i < n; i++) {
arr[i] = rand() % 10000;
}
chrono::steady_clock::time_point threadBegin = chrono::steady_clock::now();
quickSort(arr, 0, n - 1);
chrono::steady_clock::time_point threadEnd = chrono::steady_clock::now();
mut.lock();
cout << "Thread sorted array :" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << endl;
}
mut.unlock();
diffrence = chrono::duration_cast<chrono::microseconds>(threadEnd - threadBegin).count();
cout << endl << endl << "Thread USE Time = " << diffrence / 1000000 << endl;
int *arr1 = new int[n];
for(j= 0; j < n; j++) {
arr1[j] = rand() % 10000;
}
chrono::steady_clock::time_point recursBegin = chrono::steady_clock::now();
quickRecurSort(arr1, 0, n - 1);
chrono::steady_clock::time_point recursEnd = chrono::steady_clock::now();
cout << "Recurs sorted array :" << endl;
for (int j = 0; j < n; j++) {
cout << arr1[j] << endl;
}
RecursDiffrence = chrono::duration_cast<chrono::microseconds>(recursEnd - recursBegin).count();
cout << endl <<endl << "Recurs USE Time = " << RecursDiffrence / 1000000 << endl;
delete[] arr;
delete[] arr1;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2018, 20:24
Ответы с готовыми решениями:

Разница между рекурсивной функцией и обычной
Как можно посчитать разницу между рекурсивной функцией и обычной? Там как то можно время работы...

Разница во времени между датами
Здравствуйте!Подскажите, пожалуйста, как можно найти разницу во времени между двумя датами с...

Разница между двумя интервалами времени
Всем доброго дня подскажите решение следующей задачи. Есть два DateTimePicker в формате time....

Разница во времени между двумя датами
Всем привет ! Подскажите где ошибка, программа неправильно считает разницу времени между 2 датами....

0
19.12.2018, 20:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2018, 20:24
Помогаю со студенческими работами здесь

Moment.js разница времени между датами одинаковая
http://************/ns3rxw Почему-то разницу минут между датами всегда возвращает 0 let...

Проблемы с быстрой сортировкой
Пишу программу, сортирующую четные строки матрицы быстрой сортировкой. Переставляются все элементы...

Метод быстрой рекурсивной сортировки
Дано натуральное N (1&lt;=N&lt;=10), целочисленный квадратный массив-матрица (aij), 0&lt;= i ,j &lt;N....

Разница между датами в часах за вычетом нерабочего времени
Добрый день! Подскажите, пожалуйста, как подсчитать разницу между датами в часах с учетом...

Упорядочить матрицу быстрой сортировкой
Есть прога, которая сортирует матрицу по возрастанию отрицательных значений различными методами...

Замер выполнения кода (разница времени между контрольными точками)
нагуглил my $start_time = ; # код my $delta = tv_interval($start_time); print $delta; ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru