Russian Qt Forum
Ноябрь 23, 2024, 02:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Сортировка слиянием.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сортировка слиянием. (Прочитано 7734 раз)
Марина
Гость
Сортировка слиянием.
«
:
Апрель 29, 2014, 16:20 »
Есть программа на с++ сортировка методом слияния. Нужно сделать эту сортировку многопоточной. Не получается. Может кто подскажет чего?
#include "stdafx.h"
#include <iostream>
using namespace std;
//функция, сливающая массивы
void Merge(int *A, int first, int last)
{
int middle, start, final, j;
int *mas=new int[100];
middle=(first+last)/2; //вычисление среднего элемента
start=first; //начало левой части
final=middle+1; //начало правой части
for(j=first; j<=last; j++) //выполнять от начала до конца
if ((start<=middle) && ((final>last) || (A[start]<A[final])))
{
mas[j]=A[start];
start++;
}
else
{
mas[j]=A[final];
final++;
}
//возвращение результата в список
for (j=first; j<=last; j++) A[j]=mas[j];
delete[]mas;
};
//рекурсивная процедура сортировки
void MergeSort(int *A, int first, int last)
{
{
if (first<last)
{
MergeSort(A, first, (first+last)/2); //сортировка левой части
MergeSort(A, (first+last)/2+1, last); //сортировка правой части
Merge(A, first, last); //слияние двух частей
}
}
};
//главная функция
void main()
{
setlocale(LC_ALL, "Rus");
int i, n;
int *A=new int[100];
cout<<"Размер массива > "; cin>>n;
for (i=1; i<=n; i++)
{ cout<<i<<" элемент > "; cin>>A
;}
MergeSort(A, 1, n); //вызов сортирующей процедуры
cout<<"Упорядоченный массив: "; //вывод упорядоченного массива
for (i=1; i<=n; i++) cout<<A
<<" ";
delete []A;
system("pause>>void");
}
на Qt работает.
Записан
OKTA
Гость
Re: Сортировка слиянием.
«
Ответ #1 :
Апрель 29, 2014, 16:29 »
Ознакомьтесь и используйте - QtConcurrentRun
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Сортировка слиянием.
«
Ответ #2 :
Апрель 29, 2014, 23:37 »
Цитата: Марина от Апрель 29, 2014, 16:20
Нужно сделать эту сортировку многопоточной. Не получается.
А вы и не пытались
для многопоточности используется
QThread
или
QtConcurrentRun
Цитата: Марина от Апрель 29, 2014, 16:20
на Qt работает.
Конечно работает, Ведь Qt - библиотека с++
И для оформления кода используйте тэг code (кнопка с решеткой # или выбор в выпадающем списке языков)
«
Последнее редактирование: Апрель 29, 2014, 23:41 от gil9red
»
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сортировка слиянием.
«
Ответ #3 :
Апрель 30, 2014, 10:23 »
Марина
, пользуйтесь тегом для оформления кода
Цитата: OKTA от Апрель 29, 2014, 16:29
Ознакомьтесь и используйте - QtConcurrentRun
Цитата: gil9red от Апрель 29, 2014, 23:37
А вы и не пытались
для многопоточности используется
QThread
или
QtConcurrentRun
Резво
Но вот на что Вы будете натравливать QtConcurrentRun? Ведь вначале у Вас всего одна задача. Только после того как раскидаете массив на 2 части - 2 задачи и.т.д. А ядер напр 8. И что будете делать?
Записан
OKTA
Гость
Re: Сортировка слиянием.
«
Ответ #4 :
Апрель 30, 2014, 10:39 »
Это уже дело TC.
А какая разница сколько ядер? В 32-разрядной винде к примеру нельзя создать внутри одного процесса больше 2048 потоков, сколько бы процессоров и ядер не было. А на каких ядрах эти потоки будут работать - целиком дело системы. Если конечно не пытаться это изменить самому.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сортировка слиянием.
«
Ответ #5 :
Апрель 30, 2014, 10:54 »
Цитата: OKTA от Апрель 30, 2014, 10:39
Это уже дело TC.
А какая разница сколько ядер? В 32-разрядной винде ...
В другую сторону смотрите - что/как распараллелить. Это в данном случае не так уж просто. Я делал через omp intel task но это решение не общее. Вопрос хороший/интересный (неважно подозревал ли об этом ТС
)
Записан
OKTA
Гость
Re: Сортировка слиянием.
«
Ответ #6 :
Апрель 30, 2014, 11:03 »
Это я понимаю, но думаю совет использовать omp принесет мало пользы TC, а с QTConcurrentRun можно хоть что-то попробовать сделать самостоятельно. С рекурсивной функцией конечно будет тяжко, но зато хоть думалка заработает
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сортировка слиянием.
«
Ответ #7 :
Апрель 30, 2014, 11:38 »
Цитата: OKTA от Апрель 30, 2014, 11:03
Это я понимаю, но думаю совет использовать omp принесет мало пользы TC, а с QTConcurrentRun можно хоть что-то попробовать сделать самостоятельно. С рекурсивной функцией конечно будет тяжко, но зато хоть думалка заработает
Думается это не тот случай когда можно снисходительно давать советы
У самих-то советчиков думалки работают? Вот я лично в упор не вижу как задействовать Concurrent, на QThread сделать можно, но получится как-то длинно. Возможно std::thread, но там тяжело будет с оптимальностью. Хотя вряд ли она нужна ТС - но все же.
Записан
OKTA
Гость
Re: Сортировка слиянием.
«
Ответ #8 :
Апрель 30, 2014, 14:35 »
Распараллелить сортировку подмассивов уже даст выигрыш в скорости. Останется вопрос в распареллеливании ф-ии слияния массивов, но в данной реализации она не особо и поддастся, а смотреть другие способы слияния - уже другой вопрос и опять же к ТС.
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Сортировка слиянием.
«
Ответ #9 :
Апрель 30, 2014, 19:05 »
Цитата: Igors от Апрель 30, 2014, 11:38
Цитата: OKTA от Апрель 30, 2014, 11:03
Это я понимаю, но думаю совет использовать omp принесет мало пользы TC, а с QTConcurrentRun можно хоть что-то попробовать сделать самостоятельно. С рекурсивной функцией конечно будет тяжко, но зато хоть думалка заработает
Думается это не тот случай когда можно снисходительно давать советы
У самих-то советчиков думалки работают? Вот я лично в упор не вижу как задействовать Concurrent, на QThread сделать можно, но получится как-то длинно. Возможно std::thread, но там тяжело будет с оптимальностью. Хотя вряд ли она нужна ТС - но все же.
Не знаю, не разбирался
спросили на Qt-шном форуме про потоки, вот я и подсказал инструмент
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сортировка слиянием.
«
Ответ #10 :
Май 02, 2014, 13:04 »
Цитата: Igors от Апрель 30, 2014, 11:38
на QThread сделать можно, но получится как-то длинно. Возможно std::thread, но там тяжело будет с оптимальностью.
Улыбнуло. А что, по вашему, не так с оптимальностью std::thread? Да ещё и по сравнению с QThread?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...